2013-02-26 16 views
7

Ho il modulo del modello sottostante e voglio aggiungere la convalida personalizzata a un campo chiamato "billable_work".Django ModelForm convalida personalizzata: Come accedere ai valori dei campi inviati

Come accedere a un campo "progetto" che è stato inviato nel modulo? Voglio controllare il valore del progetto ('p' nell'esempio seguente) ma non riesco a trovare la sintassi corretta in modo da poter verificare il valore inviato. Qualsiasi aiuto sarebbe apprezzato.

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

risposta

12

Penso che si desidera eseguire l'override del metodo clean() del modello piuttosto che il metodo pulito di uno specifico campo di modulo. Da i documenti -

Questo metodo deve essere utilizzato per fornire la convalida del modello personalizzato e, se lo si desidera, modificare gli attributi sul modello in . Ad esempio, è possibile utilizzare per fornire automaticamente un valore per un campo o per eseguire la convalida che richiede l'accesso a più di un singolo campo.

Se avete voglia di mettere la convalida in forma allora il metodo clean() sul modulo fornisce funzionalità simili (vedi docs).

+1

Grazie per il collegamento nei documenti. Stavo cercando la sintassi self.cleaned_data.get ('progetto'). Per testare il valore devo convertire questo in una stringa. È un metodo corretto/valido? – Mrak

+0

Non sono sicuro di seguirmi? –

Problemi correlati