django验证多个内联表单

时间:2013-11-04 17:43:16

标签: django forms validation

我正在使用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

1 个答案:

答案 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)