Django:强制管理员用户在TabularInline中至少输入一项

|| 在我对对象“ 0”的管理中,我对任意数量的“ 2”个对象有一个“ 1”。我希望每个“ 0”始终具有至少一个与之相关的“ 2”对象。有没有一种方法可以使管理界面强制用户输入至少一个“ 2”?如未输入
Desk
则显示错误?     
已邀请:
马修·弗拉纳根(Matthew Flanagan)有一个很好的示例,说明了如何在表单集中要求一个有效的表单:http://code.google.com/p/wadofstuff/wiki/WadOfStuffDjangoForms和http://wadofstuff.blogspot.com/2009/08/requireing -at-least-one-inline-formset.html 希望对您有所帮助。     
使用akaihola的答案,这是一个更完整的示例: 将此添加到您的forms.py:
from django import forms
from django.forms.models import BaseInlineFormSet

class AtLeastOneRequiredInlineFormSet(BaseInlineFormSet):

    def clean(self):
        \"\"\"Check that at least one service has been entered.\"\"\"
        super(AtLeastOneRequiredInlineFormSet, self).clean()
        if any(self.errors):
            return
        if not any(cleaned_data and not cleaned_data.get(\'DELETE\', False)
            for cleaned_data in self.cleaned_data):
            raise forms.ValidationError(\'At least one item required.\')
然后,在您的admin.py中:
class DeskInline(admin.TabularInline):
    model = Desk
    formset = AtLeastOneRequiredInlineFormSet

class ChairAdmin(admin.ModelAdmin):
    inlines = [DeskInline,]

admin.site.register(Chair, ChairAdmin)
    
需要至少一项的通用FormSetѭ9requiring方法:
    def clean(self):
        \"\"\"Check that at least one service has been entered.\"\"\"
        super(MyFormSet, self).clean()
        if any(self.errors):
            return
        if not any(cleaned_data and not cleaned_data.get(\'DELETE\', False)
                   for cleaned_data in self.cleaned_data):
            raise forms.ValidationError(\'At least one item required.\')
这应该适用于普通表单集,模型表单集和嵌入式模型表单集。     

要回复问题请先登录注册