2011-04-13 28 views

回答

8

一个通用的表单集中clean()方法用于需要的至少一个项目:

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.') 

这应为纯的formsets,模型和表单集在线模型表单集工作。

15

使用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) 
相关问题