Django 表单验证,在字段集上引发错误
Django form validation, raise error on fieldset
我知道如何在我的 Django 管理表单中的特定字段上引发错误,但我希望在字段集上引发错误。我目前在字段集中有一个复选框列表,并且希望引发错误,不是针对特定字段(又名特定复选框),而是针对整个字段集。
这是我的 django 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
但这不是,我知道我可以在每个字段上提高它,但我发现如果我可以围绕字段集来提高它会更优雅
Django 表单没有字段集的概念,它们属于 ModelAdmin
class。因此,没有一种既定的方法可以将错误分配给字段集而不是特定字段。
您可以尝试覆盖 the admin templates, in particular, includes/fieldset.html
。您可以在表单的 clean
方法中添加一些代码,以便轻松访问模板中的字段集错误。
我知道如何在我的 Django 管理表单中的特定字段上引发错误,但我希望在字段集上引发错误。我目前在字段集中有一个复选框列表,并且希望引发错误,不是针对特定字段(又名特定复选框),而是针对整个字段集。
这是我的 django 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
但这不是,我知道我可以在每个字段上提高它,但我发现如果我可以围绕字段集来提高它会更优雅
Django 表单没有字段集的概念,它们属于 ModelAdmin
class。因此,没有一种既定的方法可以将错误分配给字段集而不是特定字段。
您可以尝试覆盖 the admin templates, in particular, includes/fieldset.html
。您可以在表单的 clean
方法中添加一些代码,以便轻松访问模板中的字段集错误。