2017-01-25 6 views
0

Ich habe ein Eingabeformular wie folgt definiert.Django Formular Eingabe Validierung

class ProfileForm(forms.ModelForm): 
class Meta: 
    model = Profile 
    fields = ['first_name', 'last_name', 'language', 
    ] 
    widgets = { 
     'language': forms.RadioSelect, 
    } 

Inside my models.py definiere ich die folgende:

first_name = models.CharField(max_length=250) 
last_name = models.CharField(max_length=250) 
LANGUAGE = (('AR', 'Arabic'), ('FR', 'French'), ('ES', 'Spanish')) 
language = models.CharField(max_length=20, choices=LANGUAGE, blank=False, default=None) 

Die first_name und last_name sind Pflichtfelder, und wenn der Benutzer diese beiden Optionen leer lässt, wird eine Warnmeldung aufgefordert. Ich will aber auch, dass das Feld language ein Pflichtfeld ist. Um dies zu tun, setze ich blank=False. Es ist zwar korrekt, dass das Formular ungültig ist, wenn Sie das Formular senden, ohne eine Option für language auszuwählen. Es gibt dem Benutzer jedoch keine Warnung darüber. Wie kann das gemacht werden?

+0

"Um dies zu tun, ich leere = False": Das ist die Standardeinstellung für jedes Feld, so dass Sie nicht festlegen müssen. Vielleicht entfernen Sie 'default = None' und verwenden den' initial' Parameter für Ihre ModelForm? – Evert

+0

Ja, ich habe das versucht, aber keinen Erfolg :( – anderish

+0

Die Validierungswarnung, die dem Benutzer angezeigt wird, ist etwas, das Sie in Ihrem Template HTML implementieren müssen. Haben Sie das getan? – ChidG

Antwort

0

Entsprechend der documentation, wenn Sie blank=False einstellen, können Sie default=None nicht verwenden.

Wenn nicht leer = False wird zusammen mit einem Standardwert auf das Feld gesetzt, dann wird ein Etikett mit "---------" mit dem Auswahlfeld gerendert. Um dieses Verhalten zu überschreiben, fügen Sie ein Tupel zu Auswahlmöglichkeiten hinzu, die None enthalten. z.B. (Keine, 'Ihre Zeichenfolge für die Anzeige'). Alternativ können Sie eine leere Zeichenfolge anstelle von None verwenden, wenn dies sinnvoll ist - beispielsweise auf einem CharField.