在我的对象管理员中,Chair
我有一个TabularInline
任意数量的Desk
对象.我希望每个Chair
人都至少有一个Desk
与之相关的对象.有没有办法让管理界面强制用户输入至少一个Desk
?如果没有Desk
输入则显示错误?
Sup*_*key 16
使用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.')
Run Code Online (Sandbox Code Playgroud)
然后,在你的admin.py中:
class DeskInline(admin.TabularInline):
model = Desk
formset = AtLeastOneRequiredInlineFormSet
class ChairAdmin(admin.ModelAdmin):
inlines = [DeskInline,]
admin.site.register(Chair, ChairAdmin)
Run Code Online (Sandbox Code Playgroud)
clean()
需要至少一个项目的通用FormSet 方法:
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.')
Run Code Online (Sandbox Code Playgroud)
这适用于普通表格集,模型表格集和内联模型表单集.
Matthew Flanagan 有一个很好的示例,说明如何在表单集中要求一个有效的表单:http://code.google.com/p/wadofstuff/wiki/WadOfStuffDjangoForms和http://wadofstuff.blogspot.com/2009/08/requiring -at-least-one-inline-formset.html 希望对您有所帮助。
归档时间: |
|
查看次数: |
2870 次 |
最近记录: |