1

我正在使用 Django 管理界面和 Modelform 表单验证。

我的一个模型有问题,我想不出一种方法让内联表单检查字段的唯一性。例如,有两个带有“名称”字段的内联对象。如果两者都包含相同的名称,我想提出一个验证错误。

据我所知,每个内联都被验证为一个单独的表单,因此很难将它们绑定并检查这一点。

(非常)基本思想:

Class Parent        
    name    charfield
    inlines [Child]

Class Child
    name    charfield   <- I'd like to make sure this is unqiue within the inlines
    age     intfield
4

1 回答 1

2

您编写自己的 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.")

要使用,请传入表单集工厂:

    MyFormSet = inlineformset_factory(<parent model class>, <model class>, \
                         extra=1, formset=BaseDateFormSet)
于 2013-11-04T19:17:27.747 回答