我是Django FormSet
的新手,请说我的表格如下。
class PillarForm(ModelForm):
class Meta:
model = Pillar
exclude = ("created_at", "updated_at", "is_active", "owner")
PillarFormSet = formset_factory(PillarForm, validate_min=True)
我的支柱模型如下所示
class Pillar(models.Model):
name = models.CharField(max_length=255)
description = models.TextField(null=True)
order = models.IntegerField()
#SYSTEM FIELDS
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now_add=True)
is_active = models.BooleanField(default=True)
report = models.ForeignKey(Report, on_delete=models.CASCADE)
当我的观点如下:
def pillars_create(request, report_id):
context = {}
report = Report.objects.get(pk=report_id, is_active=True)
form = PillarFormSet()
if request.POST:
form = PillarFormSet(request.POST)
print(form.errors)
return render(request, os.path.join(TEMPLATE_FOLDER, "create/index.html"),
{ 'report' : report, 'formset' : form })
但是表单没有显示错误消息,例如name
,order
是必填字段,但它没有显示错误消息,而form.is_valid
是{{ 1}},我在这里犯了什么错误。
但如果我使用字段True
,formset
,' validate_max'创建max_fields
喜欢它显示消息。
min_fields
答案 0 :(得分:0)
在我找到一些谷歌搜索后,默认情况下formsets
不会验证其中的所有表单。所以我通过扩展CustomFormSet
跟随
BaseFormSet
class PillarRequiredFormSet(BaseFormSet):
def __init__(self, *args, **kwargs):
super(PillarRequiredFormSet, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False
并在创建模型表单集时将customformset
作为kwargs
传递。
PillarModelFormSet = modelformset_factory(Pillar, form=PillarForm, formset=PillarRequiredFormSet, extra=3)
并将empty_permitted
设置为false,因此验证工作正常。