我有一个这样的形式:的Django的ModelForm不必填字段
class My_Form(ModelForm):
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
我怎样才能把可选地址字段?
我有一个这样的形式:的Django的ModelForm不必填字段
class My_Form(ModelForm):
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
我怎样才能把可选地址字段?
猜猜你的模型是这样的:
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')
外键字段呢? – digz6666 2013-10-17 04:14:36
使用ModelChoiceField。因此,如果字段定义是'abc = models.ForeignKey(Abc)',您可以编写'abc = forms.ModelChoiceField(queryset = Abc.objects.all(),required = False)' – 2013-10-17 09:33:24
确保表单被导入if您以前没有使用过它:'from django import forms' – 2013-10-30 04:11:03
你将不得不补充:
address = forms.CharField(required=False, blank=True, null=True)
空白和空属性不用于ModelForms – 2015-06-15 04:23:34
,它应该位于_model_字段中,而不是表单字段。 'null = True,blank = True'将导致ModelForm字段为'required = False' – Anentropic 2017-03-23 17:29:15
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
尽管akshar的答案看起来更好,但此方法可以防止您必须执行设置help_text和label之类的内容。 – Blackeagle52 2015-11-24 09:39:37
该方法在处理在模型级别定义为FK的字段时特别有用。按照akshar的方法,人们必须设置'queryset'属性。 – PritishC 2016-01-22 09:55:17
@从注释Anentropic的解决方案在@Atma's answer工作我。我认为这也是最好的。
他的评论:
空=真,空=真会导致的ModelForm领域需要=假
我只是把它放在我的多对多场在我UserProfile
类,它完美无缺地工作。
我UserProfile
类现在看起来是这样的(注意friends
场):
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
friends = models.ManyToManyField('self', null=True, blank=True)
我也认为这是最漂亮的解决方案,因为你做同样的事情,把null
和blank
到True
,天气你有一个简单的char
字段,或者像我一样,ManyToMany
字段。
再一次,非常感谢@Antropic。 :)
P.S. 我之所以写这篇文章是因为我无法评论(我的声望不到50),也是因为我认为他的评论需要更多的曝光。
P.P.S. 如果这个答案对你有帮助,请做出鼓励他的评论。
Cheers :)
模型是什么样的? – Ngenator 2013-04-25 04:08:56