Question

I have a simple Question and Answer app in Django 1.6 and I'm having trouble getting the question_id to print in the console. The answer submitted is printing just fine but no luck getting the question_id. It's not throwing any errors

Here is my models.py.

from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class Question(models.Model):
    user = models.ForeignKey(User)
    question = models.CharField(max_length=120)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    update = models.DateTimeField(auto_now_add=False, auto_now=True)

    def __unicode__(self):
        return self.question

class Answer(models.Model):
    question = models.ForeignKey(Question)
    answer = models.CharField(max_length=120)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    update = models.DateTimeField(auto_now_add=False, auto_now=True)

    def __unicode__(self):
        return self.answer

class UserAnswer(models.Model):
    user = models.ForeignKey(User)
    question = models.ForeignKey(Question)
    answer = models.ForeignKey(Answer, null=True, blank=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    update = models.DateTimeField(auto_now_add=False, auto_now=True)

    def __unicode__(self):
        return self.answer.answer

Here is my views.py

from django.contrib import messages
from django.contrib.auth.models import User
from django.shortcuts import render_to_response, RequestContext, Http404, HttpResponseRedirect

from .models import Question, Answer, UserAnswer

def all_questions(request):
    questions = Question.objects.all()

    if request.method == 'POST':
        print request.POST['question_id']
        print request.POST['answer']
    return render_to_response('questions/all.html', locals(), context_instance=RequestContext(request))

and here is my template.

{% extends 'base.html' %}

{% block content %}
<div class='row'>

    {% for question in questions %}    
        {{ question }}<br/>
        <form method='POST' action=''>{% csrf_token %}
        <input type='hidden' vlaue='{{ question.id }}' name='question_id'/>
            {% for ans in question.answer_set.all %}
            <input type='radio' value='{{ ans }}' name='answer'>{{ ans }} <br/>
            {% endfor %}
            <input type='submit' value='Submit'>
        </form>
    {% endfor %}

</div>

{% endblock %}
Was it helpful?

Solution

Your problem is most likely a typo:

{% extends 'base.html' %}

{% block content %}
<div class='row'>

    {% for question in questions %}    
        {{ question }}<br/>
        <form method='POST' action=''>{% csrf_token %}
        <input type='hidden' **vlaue**='{{ question.id }}' name='question_id'/>
            {% for ans in question.answer_set.all %}
            <input type='radio' value='{{ ans }}' name='answer'>{{ ans }} <br/>
            {% endfor %}
            <input type='submit' value='Submit'>
        </form>
    {% endfor %}

</div>

{% endblock %}

It should be:

{% extends 'base.html' %}

{% block content %}
<div class='row'>

    {% for question in questions %}    
        {{ question }}<br/>
        <form method='POST' action=''>{% csrf_token %}
        <input type='hidden' value='{{ question.id }}' name='question_id'/>
            {% for ans in question.answer_set.all %}
            <input type='radio' value='{{ ans }}' name='answer'>{{ ans }} <br/>
            {% endfor %}
            <input type='submit' value='Submit'>
        </form>
    {% endfor %}

</div>

{% endblock %}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top