2013-02-26 2 views
7

У меня есть модель ниже и вы хотите добавить специальную проверку в поле «billable_work».Пользовательская проверка Django ModelForm: как получить доступ к полям поля

Как мне получить доступ к проекту '', который был представлен в форме? Я хочу проверить значение проекта («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'] 

ответ

12

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

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

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

+1

Спасибо за ссылку в документах. Я искал синтаксис self.cleaned_data.get ('project'). Чтобы проверить значение, мне нужно преобразовать его в строку. Это правильный/действительный метод? – Mrak

+0

Я не уверен, что я следую? –

Смежные вопросы