2012-08-26 71 views
1

我有两个型号动态形式:问题和调查Django的:如何从其他型号

class Question(models.Model): 
text = models.TextField() 
category = models.CharField(max_length=20, choices=(('personal', 'Personal'), ('team', 'Team'), ('company', 'Company'))) 
low_answer = models.CharField(max_length = 200, null=True) 
high_answer = models.CharField(max_length = 200, null=True) 


class Survey(models.Model): 
description = models.CharField(max_length = 200, null=True) 
date = models.DateTimeField(auto_now_add=True) 
category = models.CharField(max_length=20, choices=(('personal', 'Personal'), ('team', 'Team'), ('company', 'Company'))) 
questions = models.ManyToManyField(Question) 

所以,调查中有一个字段作为问题多对多,我现在不知道如何可以做一个表单在调查中收集每个问题的答案?我所需要的每个问题都是一个int值。 我不想自己构建表单,我更愿意为此使用django。

想法?

回答

0

可以使用django models formsets

在旁注构建具有多个问题一个形式,我认为你需要ForiegnKeyOneToMany)关系从SurveyQuestion而非ManyToMany。由于调查有许多问题,但问题实例仅在一项调查中。

0

*什么你需要首先是一个额外的领域很多一对多的关系*

在你的模型我想叫Answer三等功。 AnswerSurveyQuestion的响应。你的int值将会进入这个新类。有关更多详情,请参阅Extra fields on many-to-many relationships。对于您的情况:

class Question(models.Model): 
    ... 

class Survey(models.Model): 
    ... 
    questions = models.ManyToManyField(Question, through='Answer')) 

class Answer(models.Model):     #<- this is the new model 
    question = models.ForeignKey(Question) 
    survey = models.ForeignKey(Survey) 
    response = models.IntegerField() 

*现在该formset *

在这一点上,建立表单,您可以使用modelformset_factory

from django.forms.models import modelformset_factory 
AnswersFormSet = modelformset_factory(Answer) 
formset = AnswersFormSet(queryset=Answer.objects.filter(question= some_question)) 

*而这一切,*