Django表单:如果用户将字段留空,则为默认值

时间:2013-02-06 15:22:08

标签: django django-forms

在Django Forms上,如果用户将字段留空,如何为字段指定默认值? Initial设置初始值,但用户可以删除它。

3 个答案:

答案 0 :(得分:8)

如果您正在使用ModelForm,请遵循Dan的建议。

如果您只是使用Form,那么您可能必须指定如何处理验证。 Example Documentation

class YourForm(forms.Form):
    ...

    def clean_field(self):
        data = self.cleaned_data['field']
        if not data:
            data = 'default value'

        return data

答案 1 :(得分:5)

Set a default value in the model.

class YourModel(models.Model):
    this_field = models.TextField(default="default_value")

答案 2 :(得分:0)

WallyBay的答案对我有用。 (+添加我的经验)

如果将表单字段保留为空,则将值传递。 您可以通过从.cleaned_data()中打印出来进行检查。

但是,在我的情况下,None值未替换为Model的默认值。

我通过在shell中创建对象进行了测试(“ python manage.py shell”) 传递 1)无值 2)空参数

我的模特:

class Cart(models.Model):
    total_amount = models.DecimalField(decimal_places=2, max_digits=1000, default=1, blank=True, null=True)
    quantity = models.IntegerField(default=1, blank=True)
    note = models.CharField(max_length=300, default='nothing to mention')
    summery = models.TextField(blank=False, null=True)
    event_won = models.BooleanField(default=False)

我的表格:

class CartForm(forms.ModelForm):
    summery = forms.CharField() 
    total_amount = forms.DecimalField(required=False)
    quantity = forms.IntegerField(initial=20)
    note = forms.CharField(widget=forms.TextInput(attrs={"placeholder":"write a note"}))

    class Meta: 
        model = Cart 
        fields = [
            'summery',
            'total_amount',
            'quantity',
            'note'
        ]

1)通过传递None值来创建对象。 Cart.objects.create(total_amount=None)

结果:默认值不适用。 total_amount为Null(无)。

2)创建对象而不传递任何内容。 Cart.objects.create()

结果:默认值有效。 total_amount为1。

当我在Model类中为total_amount删除null = True选项时,它给我一个错误“ NOT NULL约束失败”