2013-02-26 4 views
7

Mam poniższy formularz modelu i chcę dodać niestandardową weryfikację do pola o nazwie "billable_work".Sprawdzanie poprawności Django ModelForm: Jak uzyskać dostęp do przesłanych wartości pól

Jak uzyskać dostęp do pola "projekt", który został złożony w formularzu? Chcę sprawdzić wartość projektu ("p" w poniższym przykładzie), ale nie mogę zlokalizować właściwej składni, aby przetestować przesłaną wartość. Każda pomoc będzie doceniona.

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'] 

Odpowiedz

12

Myślę, że chcesz nadpisać metodę clean() modelu zamiast czystego sposobu określonego pola formularza. Z dokumentacji -

Ta metoda powinna być używana do sprawdzania poprawności modelu niestandardowego, a do modyfikacji atrybutów w modelu, jeśli jest to pożądane. Na przykład można użyć tego parametru, aby automatycznie podać wartość pola lub wykonać walidację, która wymaga dostępu do więcej niż jednego pola.

Jeśli chciał umieścić walidacji w formie wówczas metoda clean() na formularzu zapewnia podobną funkcjonalność (patrz docs).

+1

Dzięki za link w dokumentach. Szukałem składni self.cleaned_data.get ("projekt"). Aby przetestować wartość, muszę ją przekonwertować na ciąg znaków. Czy jest to właściwa/prawidłowa metoda? – Mrak

+0

Nie jestem pewien, czy podążam? –

Powiązane problemy