Пользовательская проверка Django ModelForm: как получить доступ к отправленным значениям поля

У меня есть приведенная ниже форма модели, и я хочу добавить пользовательскую проверку в поле с именем "billable_work".

Как получить доступ к полю "проект", которое было отправлено в форме? Я хочу проверить значение проекта ('p' в приведенном ниже примере), но не могу найти правильный синтаксис, чтобы я мог проверить представленное значение. Любая помощь будет оценена.

class EntryForm(forms.ModelForm):
    class Meta:
        model = Entries
        exclude = ('billable_work','notes')  

    billable_work = forms.BooleanField()
    notes = forms.CharField(widget=forms.Textarea,required=False)

    def clean_billable_work(self):
        b = self.cleaned_data['billable_work']
        p = form.fields['project']

        if b == True and p == 523:
            raise forms.ValidationError(_("Entries cannot be both billable and NONE: Indirect."))
        return self.cleaned_data['billable_work']

1 ответ

Решение

Я думаю, что вы хотите переопределить метод clean() в вашей модели, а не метод clean определенного поля формы. Из документов -

Этот метод должен использоваться для обеспечения пользовательской проверки модели и для изменения атрибутов вашей модели, если это необходимо. Например, вы можете использовать его для автоматического предоставления значения для поля или для проверки, которая требует доступа к более чем одному полю.

Если вы хотите поместить валидацию в форму, тогда clean() Метод в форме обеспечивает аналогичную функциональность (см. документы).

Другие вопросы по тегам