我想在管理变更表单中强制设置一个完整的内联表单集.因此,在我当前的场景中,当我在发票表单上点击save(在Admin中)时,内联订单表单为空.我想阻止人们创建没有关联订单的发票.
有人知道一个简单的方法吗?
在这种情况下,像MODEL字段上的(required=True
)这样的正常验证似乎不起作用.
我想在管理变更表单中强制设置一个完整的内联表单集.因此,在我当前的场景中,当我在发票表单上点击save(在Admin中)时,内联订单表单为空.我想阻止人们创建没有关联订单的发票.
有人知道一个简单的方法吗?
在这种情况下,像MODEL字段上的(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]