9

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

4

3 回答 3

10

If you're using a ModelForm simply follow Dan's advice.

If however you're simply using a Form then you may have to specify how to deal with validation. Example Documentation

class YourForm(forms.Form):
    ...

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

        return data
于 2013-02-06T15:41:50.310 回答
5

在模型中设置默认值。

class YourModel(models.Model):
    this_field = models.TextField(default="default_value")
于 2013-02-06T15:28:08.860 回答
0

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

如果您将表单字段留空,则将传递None值。您可以通过打印 from.cleaned_data() 来检查这一点。

但是,在我的例子中,None 值并没有被模型的默认值替换。

我通过在 shell('python manage.py shell') 中创建对象进行测试,传递1)None 值2)empty 参数

我的模型:

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()

结果:默认值有效。总金额为 1。

当我删除 Model 类中 total_amount 的 null=True 选项时,它给了我一个错误“NOT NULL constraint failed”

于 2020-03-23T16:41:18.673 回答