[Answer]-ModelForm __init__ problems

1👍

you might want to make the admin a golobal to the class

class ApplicationForm(ModelForm):

class Meta:
    model = Application
    fields = ('program', 'status', 'applicant_affirmation', 'applicant_interest_stmt', 'applicant_school', 'applicant_major', 'applicant_school_2', 'applicant_major_2', 'gpa_univ', 'estimated_grad_semester')
    widgets = {
        'applicant_interest_stmt': Textarea(attrs={'class': 'form-control', 'rows': 5}),
        'estimated_grad_semester': Select(),
    }

def __init__(self, admin, *args, **kwargs):
    super(ApplicationForm, self).__init__(*args, **kwargs)
    self.admin = admin
    if self.admin:
        self.fields['applicant_interest_stmt'].widget.attrs['disabled'] = 'disabled'
        self.fields['applicant_affirmation'].widget.attrs['disabled'] = 'disabled'


def clean(self):
    from django.core.exceptions import ValidationError
    cleaned_data = super(ApplicationForm, self).clean()
    if not self.admin:
        applicant_interest_stmt = cleaned_data.get('applicant_interest_stmt')
        applicant_affirmation = cleaned_data.get('applicant_affirmation')
        if not applicant_interest_stmt:
            msg = u'Please provide an interest statement.'
            self._errors["applicant_interest_stmt"] = self.error_class([msg])
        if not applicant_affirmation:
            msg = u'Please check the affirmation checkbox.'
            self._errors["applicant_affirmation"] = self.error_class([msg])
    return cleaned_data

Leave a comment