Django Form mit nur einem BooleanField

8

Ich bin ziemlich neu bei Django und verwende Django 1.0. Ich habe das:
forms.py:

%Vor%

views.py:

%Vor%

Das Problem ist, dass das Formular nur dann gültig ist, wenn das Kontrollkästchen aktiviert ist. Daher scheint es keine Möglichkeit zu geben, einen falschen Wert aus dem Feld zu erhalten. Soweit ich von den Dokumenten verstehe, sollte es funktionieren. Es funktioniert, wenn ich ein CharField zu meinem Formular hinzufüge ...

Verstehe ich hier etwas falsch oder ist das ein Fehler? (Ja, ich habe gegoogelt aber nichts Relevantes gefunden)

Update: Wie von @Dominic Rodger vorgeschlagen, habe ich versucht, ein verstecktes Feld hinzuzufügen. dummy = forms.CharField(initial='dummy', widget=forms.widgets.HiddenInput())
und das macht die Form gültig. Diese Problemumgehung ermöglicht es mir, jetzt weiterzugehen, aber es wäre immer noch interessant zu wissen, ob ich etwas falsch verstehe ...

    
Niklas 12.10.2009, 11:56
quelle

2 Antworten

8

Es gab einen Fehler im Code in meiner Frage. Danke an @ d0ugal, dass er mir geholfen hat, ein etwas anderes Beispiel zu finden. Das Problem war hier:

%Vor%

Der Fehler war, dass ich diese Anfrage angenommen habe. POST würde zu True ausgewertet, wenn es ein Post war. Da die Browser jedoch nichts für ein nicht angekreuztes Kontrollkästchen bereitstellen und dies das einzige Feld war, waren die POST-Daten ein leeres Wörterbuch, das zu False ausgewertet wird. Dadurch wurde None als Initialisierungsdaten verwendet, wodurch das Formular nicht gebunden und nicht gültig ist.
@ dOugals Beispiel macht das sichere Ding und testet zunächst die Methode request.method.

    
Niklas 13.10.2009, 10:09
quelle
4

Dies funktioniert auch für mich unter 1.1, 1.0.3 und 1.0 (Ich habe diese drei virtuellen Umgebungen eingerichtet). Ich habe das nur in FireFox getestet, also wenn es ein Browser-Problem ist, das ist eine andere Sache, aber soweit ich weiß, behandeln alle POST-Daten mit Checkboxen die gleichen.

Hier ist der vollständige Code für das Projekt, damit Sie in Ihrer Freizeit reproduzieren und mit Ihrem vergleichen können, um den Unterschied zu sehen.

Einrichtung in Ubuntu

%Vor%

Dann im Ordner myfirst app;

/myfirst/views.py

%Vor%

/myfirst/forms.py von Django-Importformularen

%Vor%

/myfirst/templates/test.html

%Vor%

/urls.py     von django.conf.urls.defaults import *

%Vor%

Führen Sie dann einfach das Projekt $ python manage.py runserver aus und navigieren Sie zu Ссылка . Sie werden feststellen, dass das erforderliche Kontrollkästchen nichts mit dem Kontrollkästchen zu tun hat, da Sie es nicht leer lassen können - eine "leere" Antwort ist effektiv "nein". Wenn Sie sicherstellen möchten, dass ein Benutzer eine Antwort auswählt, wählen Sie eine Mehrfachauswahl, bei der der Benutzer Ja oder Nein auswählen muss. Sie könnten sie auch dazu zwingen, mit Radiobuttons zu antworten.

    
Orange Box 12.10.2009 17:05
quelle

Tags und Links