2015-06-19 2 views
0

Я знаю, как поднять ошибку в определенном поле в моей форме администратора django, но мне хотелось бы, чтобы ошибка была поднята на поле. В настоящее время у меня есть список флажков в наборе полей и вы хотите, чтобы ошибка была поднята, а не в определенном поле (ака определенной флажке), но на всем полевом наборе.Django form validation, raise error on fieldset

вот мой Джанго admin.py

class EventAdmin(admin.ModelAdmin): 
    form = EventForm 
    fieldsets = [ 
     (None, {'fields': [ 
           'approval_state', 
           'title', 
           'description' 
          ] 
       } 
     ), 
     ('Group Owner', {'fields': [ 
             'grpOwner_vcoe', 
             'grpOwner_cssi', 
             'grpOwner_essc', 
             'grpOwner_tmscc', 
             'grpOwner_inmc', 
             'grpOwner_cc7', 
             'grpOwner_ias', 
            ] 
         } 
     ), ... 

class EventForm(forms.ModelForm): 

    # Form validation 
    def clean(self): 
     # Collect data 
     start = self.cleaned_data.get('start') 
     end = self.cleaned_data.get('end') 

     grpOwner_vcoe = self.cleaned_data.get('grpOwner_vcoe') 
     grpOwner_cssi = self.cleaned_data.get('grpOwner_cssi') 
     grpOwner_essc = self.cleaned_data.get('grpOwner_essc') 
     grpOwner_tmscc = self.cleaned_data.get('grpOwner_tmscc') 
     grpOwner_inmc = self.cleaned_data.get('grpOwner_inmc') 
     grpOwner_cc7 = self.cleaned_data.get('grpOwner_cc7') 
     grpOwner_ias = self.cleaned_data.get('grpOwner_ias') 

     if not (grpOwner_vcoe or grpOwner_cssi or grpOwner_essc or grpOwner_tmscc or grpOwner_inmc or grpOwner_cc7 or grpOwner_ias): 
      if not self._errors.has_key('Group Owner'): 
       self._errors['Group Owner'] = ErrorList() 
      self._errors['Group Owner'].append('Test') 

     # Check start & end data 
     if start > end: 
      if not self._errors.has_key('start'): 
       self._errors['start'] = ErrorList() 
      self._errors['start'].append('Event start must occur before event end') 


     return self.cleaned_data 

Но это не так, я знаю, что могу просто поднять его на каждом поле, но я считаю его гораздо более изящным, если бы я мог сделать это вокруг fielset

ответ

0

Формы Django не имеют концепции полей, они относятся к классу ModelAdmin. Поэтому не существует установленного способа назначения ошибок для набора полей вместо определенного поля.

Вы можете попробовать переопределить the admin templates, в частности, includes/fieldset.html. Вы можете добавить код в метод clean формы, чтобы упростить доступ к ошибкам в полевом шаблоне.