我想在管理员更改表单中强制使用整个内联表单集。因此,在当前情况下,当我在“发票”表单(在“管理员”中)中单击“保存”时,内联订单表单为空白。我想阻止人们创建没有关联订单的发票。
有人知道这样做的简单方法吗?
required=True在此实例中,模型字段上的常规验证(如)似乎不起作用。
required=True
最好的方法是定义一个自定义表单集,使用一种干净的方法来验证至少存在一个发票订单。
class InvoiceOrderInlineFormset(forms.models.BaseInlineFormSet): def clean(self): # get forms that actually have valid data count = 0 for form in self.forms: try: if form.cleaned_data: count += 1 except AttributeError: # annoyingly, if a subform is invalid Django explicity raises # an AttributeError for cleaned_data pass if count < 1: raise forms.ValidationError('You must have at least one order') class InvoiceOrderInline(admin.StackedInline): formset = InvoiceOrderInlineFormset class InvoiceAdmin(admin.ModelAdmin): inlines = [InvoiceOrderInline]