2013-11-25 3 views
0

나는 응용 프로그램을 작성 중이므로 사용자가 취할 수있는 평가를해야합니다. 제 문제는 formset을 사용하여 각 선택 항목과 함께 질문을 나열하고 싶습니다. 이것은 형식 세트를 사용하여 수행 할 수 있지만이를 완료하는 방법은 아님을 알아야합니다. 당신이 볼 수 있듯이 내가 잘 쓰여진 모델을 가지고 있지만 양식에서 모든 코드는 실험이며 내가 정말 할 수있는 방법을 알고하지 않습니다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 }}이 아니어야합니까? 인스턴스가 이미 뷰에서 작성되었으므로 템플리트에서 사용할 필요는 없습니다.