Seite 1 von 1

Django Formular Feldvalidierung

Verfasst: Dienstag 19. Juni 2012, 21:28
von jochen
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>

Re: Django Formular Feldvalidierung

Verfasst: Mittwoch 20. Juni 2012, 08:08
von jens
Wird clean_name_first überhaupt aufgerufen?

Btw. du kannst auch einfach min_length angeben!

Re: Django Formular Feldvalidierung

Verfasst: Mittwoch 20. Juni 2012, 18:38
von jochen
laut doku wird clean_name_first immer in der Validierung aufgerufen. Man muss es nicht extra aufrufen.

Re: Django Formular Feldvalidierung

Verfasst: Mittwoch 20. Juni 2012, 18:52
von /me
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.

Re: Django Formular Feldvalidierung

Verfasst: Donnerstag 21. Juni 2012, 06:43
von jochen
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

Re: Django Formular Feldvalidierung

Verfasst: Donnerstag 21. Juni 2012, 08:26
von jens
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...

Re: Django Formular Feldvalidierung

Verfasst: Donnerstag 21. Juni 2012, 18:52
von jochen
Ich benutze Eclipse. Aber ich bin beruflich VB.Net Coder, und da macht das alles Studio für mich :).

Bin da halt verwöhnt

Re: Django Formular Feldvalidierung

Verfasst: Donnerstag 21. Juni 2012, 20:46
von noisefloor
Hallo,

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

Gruß, noisefloor

Re: Django Formular Feldvalidierung

Verfasst: Sonntag 24. Juni 2012, 11:51
von jochen
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.

Re: Django Formular Feldvalidierung

Verfasst: Sonntag 24. Juni 2012, 12:07
von Dav1d
PyDev für Eclipse macht das auch für mich, schließt sogar Klammern automatisch ;)

Re: Django Formular Feldvalidierung

Verfasst: Montag 25. Juni 2012, 08:56
von 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.

Re: Django Formular Feldvalidierung

Verfasst: Montag 25. Juni 2012, 16:34
von jens
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.