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,False)
                   for cleaned_data in self.cleaned_data):
            raise forms.ValidationError(\'At least one item required.\')
这应该适用于普通表单集,模型表单集和嵌入式模型表单集。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...