我正在使用Django管理界面和Modelform表单验证。
我的某个模型存在问题,我无法找到一种让内联表单检查字段唯一性的方法。例如,有两个内联对象,其字段为“name”。如果两者都包含相同的名称,我想提出验证错误。
从我所看到的情况来看,每个内联都被验证为一个单独的表单,因此很难将它们绑定并检查它。
(非常)基本想法:
Class Parent
name charfield
inlines [Child]
Class Child
name charfield <- I'd like to make sure this is unqiue within the inlines
age intfield
答案 0 :(得分:1)
您编写自己的FormSet类,并进行干净的可调用:
class BaseDateFormSet(BaseInlineFormSet):
'''run some validation on the forms dates values'''
def clean(self):
super(BaseDateFormSet, self).clean()
if any(self.errors):
return
for form in self.forms:
start_date = form.cleaned_data.pop('start_date', None)
end_date = form.cleaned_data.pop('end_date', None)
if start_date and end_date:
if start_date >= end_date:
raise ValidationError("The end date is before the start date.")
要使用,请进入formset工厂:
MyFormSet = inlineformset_factory(<parent model class>, <model class>, \
extra=1, formset=BaseDateFormSet)