问题描述
||
在我对对象“ 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.\')
这应该适用于普通表单集,模型表单集和嵌入式模型表单集。