Django Formular Feldvalidierung

Django, Flask, Bottle, WSGI, CGI…
Antworten
jochen
User
Beiträge: 5
Registriert: Dienstag 19. Juni 2012, 21:20

Hallo Zusammen,

ich hab hier ein Problem in Django. Und war schaue ich mir gerade die unterschiedlichen Validierungsmöglichkeiten bei den Forms an.
Und ich verstehe nicht, warum ich bei dem folgendem Code einfach keinen Fehler bekomme.

Form view

Code: Alles auswählen

class RegestrationForm(forms.Form):
    name_first = forms.CharField(required=True)
    name_last = forms.CharField(required=True)
    name_nick = forms.CharField(required=True)
    birthdate = forms.CharField(initial='31122012')
    adress_street = forms.CharField(required=True)
    adress_city = forms.CharField(required=True)
    adress_State = forms.CharField(required=True)
    adress_zipcode = forms.IntegerField(required=True)
    adress_country = forms.ChoiceField(choices=[ (o.id, o.name) for o in Country.objects.all()])
    contact_language = forms.ChoiceField(choices=[ (o.id, o.name) for o in ContactLanguage.objects.all()])
    contact_email = forms.EmailField(help_text='A valid email address, please.')


def clean_name_first(self):
    
    if len(self.cleaned_data['name_first'].strip()) > 0: 
        self.errors['name_first'] = ('Please Enter First Name')
        raise forms.ValidationError('No First Name entered')
    else:
        raise forms.ValidationError('No First Name entered')
Hier müsste doch immer ein Fehler kommen. Bei clean_name_first



Aufrufender View

Code: Alles auswählen

def registeruser(request):
    
    if request.method == 'POST': 

        form = RegestrationForm(request.POST)
        
        if form.is_valid():
            
            myPlayer = Player()
            myPlayer.name_first = form.cleaned_data["name_first"]
            myPlayer.name_last = form.cleaned_data["name_last"]
            myPlayer.name_nick = form.cleaned_data["name_nick"]
            myPlayer.birthdate = form.cleaned_data["birthdate"]
            myPlayer.adress_street = form.cleaned_data["adress_street"]
            myPlayer.adress_city =form.cleaned_data["adress_city"]
            myPlayer.adress_State = form.cleaned_data["adress_State"]
            myPlayer.adress_zipcode = form.cleaned_data["adress_zipcode"]
            myPlayer.contact_email = form.cleaned_data["contact_email"]
            myPlayer.contact_language_id_fk = form.cleaned_data["contact_language"]
            myPlayer.adress_country_id_fk = form.cleaned_data["adress_country"]
            myPlayer.save()

            return render_to_response("userauth/registration_view_sucess.html") 
    else:
        form = RegestrationForm() 
    return render_to_response("userauth/registration_view.html", {"form": form})

Code: Alles auswählen

		<tr>
			<td>
			{% if form.errors %}
        		<ol>
        		{% for error in form.errors %}
            	<li><strong>{{ error|escape }}</strong> <strong>{{ form.name_first.errors }}</strong> </li>
        		{% endfor %}
        		</ol>
    		{% endif %}
			</td>
		</tr>
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wird clean_name_first überhaupt aufgerufen?

Btw. du kannst auch einfach min_length angeben!

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
jochen
User
Beiträge: 5
Registriert: Dienstag 19. Juni 2012, 21:20

laut doku wird clean_name_first immer in der Validierung aufgerufen. Man muss es nicht extra aufrufen.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

jochen hat geschrieben:laut doku wird clean_name_first immer in der Validierung aufgerufen. Man muss es nicht extra aufrufen.
Die Frage lautet: Weißt du wirklich, dass diese Methode aufgerufen wird? Die Dokumentation ist eins, die Überprüfung das andere. Mit einem eingestreuten print ließe sich das wunderbar testen.

So wie der Code von der Idee her aussieht soll clean_name_first als Methode in der Klasse RegestrationForm (das RegistrationForm heißen sollte) sein. Der Code sieht aber praktisch anders aus, da die Definition nicht eingerückt ist und clean_name_first damit nicht zur Klassendefinition gehört.
jochen
User
Beiträge: 5
Registriert: Dienstag 19. Juni 2012, 21:20

Okay des mit der Einrückung ist ein Argument. Boah wie des nervt mit dieser Einrückung.
Ich werde das gleich mal heut dann testen.

Wie so oft liegt es halt an diesen Kleinigkeiten.

Danke erstmal für die Antwort
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dachte die falsche Einrückung wäre nur ein copy&paste Fehler...

@jochen: Hast du keinen Editor der das Einrücken automatisch macht? btw. das man einfach einen Block markieren kann und die Einrückung verschieben kann? Ohne dem macht das keinen Spaß.
Ich hab die Einrückung nie als last angesehen. Ich finde das gut, denn eigentlich macht man in allen anderen Sprachen eh, weil man sauberen code haben möchte...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
jochen
User
Beiträge: 5
Registriert: Dienstag 19. Juni 2012, 21:20

Ich benutze Eclipse. Aber ich bin beruflich VB.Net Coder, und da macht das alles Studio für mich :).

Bin da halt verwöhnt
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wer Einrückung doof findet ist bei Python definitv falsch... ;-)

Gruß, noisefloor
jochen
User
Beiträge: 5
Registriert: Dienstag 19. Juni 2012, 21:20

Du hast mich falsch verstanden Noise. Ich finde Einrückungen nicht doof, nur macht des halt normalerweise überall die Entwicklungsumgbung für mich.
Und normalerweise funktioniert auch überall ein Programm, selbst bei falschen Einrückungen. Meinst du nicht, das man sich in Python eventuell auch daran erst
gewöhnen muss?

Ich finde irgendwie schon.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

PyDev für Eclipse macht das auch für mich, schließt sogar Klammern automatisch ;)
the more they change the more they stay the same
deets

jochen hat geschrieben:Du hast mich falsch verstanden Noise. Ich finde Einrückungen nicht doof, nur macht des halt normalerweise überall die Entwicklungsumgbung für mich.
Und normalerweise funktioniert auch überall ein Programm, selbst bei falschen Einrückungen.
Aber nur, weil man dann ueberall *Klammer* setzen musste. Geschweifte, ueblicherweise. Muss man sich da nicht genauso dran gewoehnen? Ich finde schon.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

deets hat geschrieben:Aber nur, weil man dann ueberall *Klammer* setzen musste. Geschweifte, ueblicherweise. Muss man sich da nicht genauso dran gewoehnen? Ich finde schon.
Genau. Und wenn man mal eine tiefere Verschachtelung hat, kommt es auch gern mal vor, das Klammern fehlen/zuviel sind. Eine falsche Einrückung sieht man visuell besser.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten