-1
在我的django forms.py文件中,我試圖替換兩次重複的驗證代碼。我所做的每一次嘗試都只發生一次,似乎並不奏效。django - 如何替換表單驗證中的重複代碼
我不知道如何編寫代碼,以便在驗證中每次重複代碼只出現一次。這應該是可能的,但我不明白如何實現這一點。
我希望有人能幫助我,因爲這讓我感到困惑。
這裏是我的驗證碼:
def clean(self):
cd_cdf = super(CertificationDetailsForm, self).clean()
# Must check the most specific cases first, then the general cases.
if 'certification_type' in cd_cdf and cd_cdf['certification_type'] == '':
self._errors['certification_type'] = self.error_class([_("This field is required.")])
elif 'certification_type' in cd_cdf and cd_cdf['certification_type'] == display_types.ENTER_MY_OWN_TYPE_DESCRIPTION:
if 'certification_type_description' in cd_cdf and len(cd_cdf['certification_type_description'].strip()) == 0:
self._errors['certification_type_description'] = self.error_class([_("This field is required.")])
# repeated code occurrence #1.1.
if 'certification_title' in cd_cdf and len(cd_cdf['certification_title'].strip()) == 0:
self._errors['certification_title'] = self.error_class([_("This field is required.")])
# repeated code occurrence #2.1.
if 'certification_date' in cd_cdf and cd_cdf['certification_date'] is not None:
if cd_cdf['certification_date'] > date.today():
self._errors['certification_date'] = self.error_class([_("Date must not be greater than today.")])
elif 'certification_type' in cd_cdf and cd_cdf['certification_type'] != display_types.ENTER_MY_OWN_DETAILS:
# repeated code occurrence #1.2.
if 'certification_title' in cd_cdf and len(cd_cdf['certification_title'].strip()) == 0:
self._errors['certification_title'] = self.error_class([_("This field is required.")])
# repeated code occurrence #2.2.
if 'certification_date' in cd_cdf and cd_cdf['certification_date'] is not None:
if cd_cdf['certification_date'] > date.today():
self._errors['certification_date'] = self.error_class([_("Date must not be greater than today.")])
elif 'certification_type' in cd_cdf and cd_cdf['certification_type'] == display_types.ENTER_MY_OWN_DETAILS:
if 'certification_description' in cd_cdf and len(cd_cdf['certification_description'].strip()) == 0:
self._errors['certification_description'] = self.error_class([_("This field is required.")])
# remove the entered value and/or assign a default value, when the certification type only requires minimum data.
if 'certification_type_description' in cd_cdf and len(cd_cdf['certification_type_description'].strip()) > 0:
cd_cdf['certification_type_description'] = None
if 'certification_title' in cd_cdf and len(cd_cdf['certification_title'].strip()) > 0:
cd_cdf['certification_title'] = None
if 'certification_institution' in cd_cdf and len(cd_cdf['certification_institution'].strip()) > 0:
cd_cdf['certification_institution'] = None
if 'certification_date' in cd_cdf and cd_cdf['certification_date'] is not None:
cd_cdf['certification_date'] = None
return cd_cdf
下面是類型的代碼,以防萬一:
CERTIFICATE = 1
CERTIFICATE_LEVEL_I = 2
CERTIFICATE_LEVEL_II = 3
CERTIFICATE_LEVEL_III = 4
CERTIFICATE_LEVEL_IV = 5
STANDARD_CERTIFICATE = 6
INTERMEDIATE_CERTIFICATE = 7
ADVANCED_CERTIFICATE = 8
ACADEMIC_CERTIFICATE = 9
PROFESSIONAL_CERTIFICATE = 10
OTHER_CERTIFICATE = 11
ENTER_MY_OWN_TYPE_DESCRIPTION = 7777 # 7777 triggers a hidden text field to be displayed.
ENTER_MY_OWN_DETAILS = 9999
CERTIFICATION_TYPES = (
(CERTIFICATE, _('Certificate')),
(CERTIFICATE_LEVEL_I, _('Certificate Level I')),
(CERTIFICATE_LEVEL_II, _('Certificate Level II')),
(CERTIFICATE_LEVEL_III, _('Certificate Level III')),
(CERTIFICATE_LEVEL_IV, _('Certificate Level IV')),
(STANDARD_CERTIFICATE, _('Standard Certificate')),
(INTERMEDIATE_CERTIFICATE, _('Intermediate Certificate')),
(ADVANCED_CERTIFICATE, _('Advanced Certificate')),
(ACADEMIC_CERTIFICATE, _('Academic Certificate')),
(PROFESSIONAL_CERTIFICATE, _('Professional Certificate')),
(OTHER_CERTIFICATE, _('Other Certificate')),
(ENTER_MY_OWN_TYPE_DESCRIPTION, _('Enter my own Type Description')),
(ENTER_MY_OWN_DETAILS, _('Enter my own details'))
)