Django modelform不是必填字段

时间:2013-04-25 03:32:07

标签: django django-forms optional django-models

我有一个这样的表格:

class My_Form(ModelForm):
    class Meta:
        model = My_Class
        fields = ('first_name', 'last_name' , 'address')

如何将地址字段设为可选字段?

7 个答案:

答案 0 :(得分:78)

class My_Form(forms.ModelForm):
    class Meta:
        model = My_Class
        fields = ('first_name', 'last_name' , 'address')

    def __init__(self, *args, **kwargs):
        super(My_Form, self).__init__(*args, **kwargs)
        self.fields['address'].required = False

答案 1 :(得分:66)

猜猜你的模型是这样的:

class My_Class(models.Model):

    address = models.CharField()

您的表格:

class My_Form(ModelForm):

    address = forms.CharField(required=False)

    class Meta:
        model = My_Class
        fields = ('first_name', 'last_name' , 'address')

答案 2 :(得分:5)

您必须添加:

address = forms.CharField(required=False)

答案 3 :(得分:3)

来自@Atma's answer评论的@ Anentropic解决方案为我工作。而且我认为它也是最好的。

他的评论:

  

null = True,blank = True将导致ModelForm字段必需= False

我只是在UserProfile课程的ManyToMany字段中设置它,它运行得很完美。

我的UserProfile课程现在看起来像这样(注意friends字段):

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    friends = models.ManyToManyField('self', null=True, blank=True)

我也认为这是最美丽的解决方案,因为你做同样的事情,把nullblank放到True,天气你有一个简单的char字段或者,就像我一样,ManyToMany字段。

再次,非常感谢@Anentropic。 :)

P.S。 我写这篇文章是因为我无法发表评论(我的声誉不到50),但也因为我认为他的评论需要更多曝光。

P.P.S。 如果这个答案对你有所帮助,请尽快发表评论。

干杯:)

答案 4 :(得分:3)

解决方案: 同时使用blank=Truenull=True

my_field = models.PositiveIntegerField(blank=True, null=True)

说明:

如果您使用null=True

`my_field = models.PositiveIntegerField(null=True)`

然后my_field是必需的,在形式中以*开头,您不能提交空值。

如果您使用blank=True

`my_field = models.PositiveIntegerField(blank=True)`

然后不需要my_field,在表单中不带*号,您不能提交值。 但是将获得空字段。

注意:

1) marking as not required and 
2) allowing null field are two different things.

专业提示:

Read the error more carefully than documentation.

答案 5 :(得分:1)

field = models.CharField(max_length=9, default='', blank=True)

只需在模型字段中添加blank = True,当您使用模型表单时就不需要。

答案 6 :(得分:0)

以上答案是正确的;但是,请注意,在ManyToManyField上设置null=True在数据库级别上无效,并且在迁移时会引发以下警告:

(fields.W340) null has no effect on ManyToManyField.

thread的另一个很好的解释。