我的模型看起来像这样:
class Shoe(models.Model):
size = models.IntegerField(choices=sizeChoices)
brand = models.ForeignKey('Brand', related_name='shoes', choices=brandChoices)
我的ModelForm看起来像这样:
class ShoeForm(ModelForm):
class Meta:
model = Shoe
fields = ['brand', 'size']
我希望表单需要输入而不是默认的空白选项,但我想在呈现的选项集中保留空白值。我如何实现这一目标?
答案 0 :(得分:2)
向ShoeForm
添加custom clean method并检查该值是否仍为空白。如果是,请提出ValidationError
。
class ShoeForm(ModelForm):
class Meta:
model = Shoe
fields = ['brand', 'size']
def clean_brand(self):
data = self.cleaned_data['brand']
if data == '':
raise forms.ValidationError("You need to select one brand!")
return data
在views.py
中,只需检查if form.is_valid():
即可。
答案 1 :(得分:0)
您真正想要做的唯一事情是在品牌领域设置必需:
class ShoeForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ShoeForm, self).__init__(*args, **kwargs)
self.fields['brand'].required = True