psoares
psoares

Reputation: 4883

django form doesn't work on click submit

I'm trying to do a form, with gender choices. The user could choice between male or female.

What I have now in 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

in the template:

<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 %} 

the views:

 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 }) 

the form is done and works, but the problem is when I click on the submit button nothing happen. He is not given me the information

Upvotes: 0

Views: 4945

Answers (2)

Dominik Szopa
Dominik Szopa

Reputation: 1919

You have to define url where post data will be sent

This will send post data to url /my_app/my_view/

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

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

This will send post data to current url you are on.

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

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

Upvotes: 2

Daniel Roseman
Daniel Roseman

Reputation: 599600

I don't understand why you've defined DemoDataForm in both models.py and forms.py, once as a ModelForm and once as a plain form. Because of that, it's impossible to tell from the code you've posted exactly which class you're instantiating.

I would say, drop the version in forms.py, move the one in models.py into forms.py, and use that. But first you'll need to fix a slight bug - instead of:

fields = ('gender')

you need

fields = ('gender',)

because a one-item tuple always needs a comma, otherwise Python will try to iterate through the string.

Upvotes: 0

Related Questions