2010-09-23 5 views
0

J'essaie de faire une forme, avec des choix de genre. L'utilisateur pourrait choisir entre un homme ou une femme.Le formulaire django ne fonctionne pas sur click submit

Ce que j'ai maintenant forms.py:

class GenderForm(forms.Form): 
    demo = DemoData.objects.all() 
    GENDER_CHOICES = [ 
     ('Male', 'Masculino'), 
     ('Female', 'Feminino')] 

    gender = forms.ModelChoiceField(demo, widget=Select(), required=True) 
    choices_distlabel = [('', '')] + GENDER_CHOICES 
    gender.choices = choices_distlabel 

dans le modèle:

<form action="" method="post"> 
    {% for field in form_gender %} 
     {{ field }} 
    {% endfor %} 

<input type="submit" value="Submit" /> 
</form> 
{% if idgender %} 
    <img src="/age_gender/{{ idgender }}.png" alt="Graph"/> 
{% endif %} 

les vues:

if form_gender.is_valid(): 
     gender = form_gender.cleaned_data['gender'] 
     gender = gender.gender 
     if gender: 
      idgender = gender 
     return render_to_response('age.html', {'form_gender': form_gender, 'idgender': idgender }) 

la forme est fait et les travaux, mais le problème est quand je clique sur le bouton soumettre rien ne se passe. Il ne me donne pas l'information

+0

Qu'entend-on par "rien ne se passe"? Le formulaire n'est pas soumis ou il l'est, mais vous n'en recevez aucune donnée? – yedpodtrzitko

+0

En fait, j'ai réussi à le faire fonctionner il y a un certain temps. Le formulaire n'était pas validé. J'ai fait quelques changements à la forme et maintenant ça marche – pavid

Répondre

0

Je ne comprends pas pourquoi vous avez défini DemoDataForm dans models.py et forms.py, une fois en tant que ModelForm et une fois en tant que forme normale. Pour cette raison, il est impossible de dire à partir du code que vous avez posté exactement quelle classe vous instanciez. Je dirais, déposez la version dans forms.py, déplacez celui dans models.py dans forms.py, et utilisez cela. Mais d'abord, vous aurez besoin de corriger un petit bug - au lieu de:

fields = ('gender') 

vous avez besoin

fields = ('gender',) 

parce qu'un tuple un élément a toujours besoin d'une virgule, sinon Python va essayer de itérer la chaîne.

+0

En fait, c'était une erreur idiote, j'ai oublié les parenthèses. désolé à ce sujet, mais je n'ai pas vu l'erreur. Mais merci pour votre suggestion. J'ai vu dans la documentation django et j'ai essayé comme ça – pavid

+0

Je suis allé mettre à jour ma question et poster mon résultat final. N'hésitez pas à suggérer des améliorations :) – pavid

0

Dans le code ci-dessus, le bouton d'envoi est en dehors des balises de formulaire? Ne devrait-il pas être à l'intérieur des étiquettes de formulaire?

+0

Mon erreur d'écriture. Ce n'est pas le problème puisque j'ai seulement fait cette erreur en copiant ici – pavid

2

Vous devez définir url où les données de poste seront envoyés

transmettront des données post à url/my_app/ma_vue/

<form action="/my_app/my_view/" method="post"> 
    {% for field in form_gender %} 
     {{ field }} 
    {% endfor %} 

<input type="submit" value="Submit" /> 
</form> 

Cela envoyer des données de poste à url actuel, vous êtes sur.

<form action="." method="post"> 
    {% for field in form_gender %} 
     {{ field }} 
    {% endfor %} 

<input type="submit" value="Submit" /> 
</form> 
+0

J'ai essayé de cette façon aussi, mais ce n'est pas la raison pour laquelle ça ne marche pas. Rien ne change.. – pavid

Questions connexes