2013-11-25 3 views
0

Я делаю приложение, и теперь мне нужно сделать оценку, которую могут принять пользователи, моя проблема в том, что я хочу использовать набор форм, чтобы перечислять вопросы с соответствующими вариантами, I знайте, что это можно сделать с использованием форм, но не для того, чтобы это сделать. Ниже мой код:Как использовать django formsets для заполнения вопросника

# models.py 

class Evaluation(models.Model): 
    """ 
    An evaluation is for a session. 
    Each session should have an evaluation 
    """ 
    session = models.OneToOneField(
     Session, 
     related_name='evaluation', 
     verbose_name=u'Sesión' 
    ) 

    class Meta: 
     verbose_name = u'Evaluación' 
     verbose_name_plural = u'Evaluaciones' 

    def __unicode__(self): 
     return u'Evaluación de la sesion {0}'.format(
      self.session.name 
     ) 


class Question(models.Model): 
    """ 
    A question inside of an evaluation 
    """ 
    evaluation = models.ForeignKey(
     Evaluation, 
     verbose_name=u'Evaluación', 
     related_name='questions' 
    ) 
    question_type = models.CharField(
     max_length=20, 
     verbose_name=u'Tipo de respuesta', 
     choices=QUESTION_TYPES 
    ) 
    sentence = models.CharField(
     max_length=255, 
     verbose_name=u'Pregunta' 
    ) 
    position = models.IntegerField(
     default=0, 
     verbose_name=u'Posición' 
    ) 

    class Meta: 
     verbose_name = u'Pregunta' 
     verbose_name_plural = u'Preguntas' 
     ordering = ['position', 'sentence'] 

    def __unicode__(self): 
     return self.sentence 


class Choice(models.Model): 
    question = models.ForeignKey(
     Question, 
     related_name='choices', 
     verbose_name=u'Pregunta' 
    ) 
    sentence = models.CharField(
     max_length=255, 
     verbose_name=u'Posible respuesta' 
    ) 
    position = models.IntegerField(
     default=0, 
     verbose_name=u'Posición' 
    ) 

    class Meta: 
     verbose_name = u'Posible respuesta' 
     verbose_name_plural = u'Posibles respuestas' 
     ordering = ['position', 'sentence'] 

    def __unicode__(self): 
     return self.sentence 

---- 

# forms.py 

from django.forms.models import inlineformset_factory 
from models import Evaluation, Question 


AnswerFormSet = inlineformset_factory(
    Evaluation, Question, exclude=('question',), 
    extra=0, can_delete=False 
) 

---- 

# views.py 

@login_required() 
def session_evaluation(request, course_slug, session_position): 
    data = {} 
    course = get_object_or_404(Course, slug=course_slug) 
    session = Session.objects.filter(course=course).get(position=session_position) 
    evaluation = get_object_or_404(Evaluation, session=session) 
    if request.method == 'POST': 
     formset = AnswerFormSet(request.POST, instance=evaluation) 
     if formset.is_valid(): 
      formset.save() 
      print 'formset valid...' 
    else: 
     formset = AnswerFormSet(instance=evaluation) 
    data['course'] = course 
    data['session'] = session 
    data['formset'] = formset 
    return render(request, 'courses/session_evaluation.html', data) 

---- 

# template.html 
<form id="evaluation" method="post" role="form"> 
    {% csrf_token %} 
    {{ formset.management_form }} 
    <ul class="evaluation"> 
     {% for form in formset.forms %} 
      <li> 
       {{ form.instance }} 
       {{ form.instance.choices.all }} 
      </li> 
     {% endfor %} 
    </ul> 
    <div class="form-group clearfix nmb"> 
     <button type="submit" class="btn btn-primary pull-right">Enviar respuestas</button> 
    </div> 
</form> 

Как вы можете видеть, у меня есть модели хорошо написано, но из форм всего код только эксперимент, и я действительно не знаю, как это сделать.

Что я получаю в шаблоне с этим кодом является вопрос предложение и список вариантов, что-то вроде:

[question sentence here]? [<Choice: [choice #1 here]>, <Choice: [choice #2 here]>] 

Что такое чистый и простой способ сделать это с FormSets?

Что я хочу получить, это список вопросов с соответствующим списком вариантов с помощью переключателей, потому что это оценка.

ответ

0

Не должно быть {{ form.as_p }} или {{ form.as_table }}? Экземпляр уже создан в представлении, поэтому его нельзя использовать в шаблоне.

Смежные вопросы