我有这样的形式:
class My_Form(ModelForm):
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
如何将地址字段设为可选?
Answers:
猜你的模型是这样的:
class My_Class(models.Model):
address = models.CharField()
Django版本<1.8的表格:
class My_Form(ModelForm):
address = forms.CharField(required=False)
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
Django版本> 1.8的表格:
class My_Form(ModelForm):
address = forms.CharField(blank=True)
class Meta:
model = My_Class
fields = ('first_name', 'last_name' , 'address')
abc=models.ForeignKey(Abc)
,你可以写abc = forms.ModelChoiceField(queryset=Abc.objects.all(), required=False)
from django import forms
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
queryset
属性。
field = models.CharField(max_length=9, default='', blank=True)
只需blank=True
在您的模型字段中添加,使用模型表单时就不需要。
来源:https : //docs.djangoproject.com/en/3.1/topics/forms/modelforms/#field-types
您必须添加:
address = forms.CharField(required=False)
null=True, blank=True
将导致ModelForm字段为required=False
@Anentropic对@Atma答案的评论中的解决方案对我有用。我认为这也是最好的。
他的评论:
null = True,空白= 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)
我也认为这是最漂亮的解决方案,因为你做同样的事情,就把null
并blank
给True
,天气,你有一个简单的char
领域,或者像我有,ManyToMany
领域。
再次感谢@Anentropic。:)
PS我之所以写这篇文章是因为我无法发表评论(我的声誉不到50),还因为我认为他的评论需要更多的曝光度。
PPS如果此回答对您有所帮助,请敬请发表评论。
干杯:)
解决方案:同时使用blank=True
,null=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.