1

我有两个模型:问题和调查

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)

所以,Survey 有一个作为 ManytoMany 的字段问题,我现在想知道如何在 Survey 上制作一个表格来收集每个问题的答案?每个问题我只需要一个 int 值。我不想自己构建表单,我更愿意为此使用 django。

想法?

4

2 回答 2

0

您可以使用django 模型表单集构建一个包含多个问题的表单

在旁注中,我认为您需要ForiegnKey( OneToMany) 与SurveytoQuestion而不是的关系ManyToMany。由于一项调查有很多问题,但一个问题实例仅在一项调查中。

于 2012-08-26T09:46:17.037 回答
0

* 一开始你需要的是多对多关系中的一个额外字段 *

在您的模型中,我错过了名为Answer. AnAnswer是 a Surveyfor a中的响应Question。您的 int 值将包含在这个新类中。有关更多详细信息,请参阅多对多关系的额外字段。对于您的场景:

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

* 现在表单集 *

此时,要构建表单,可以使用modelformset_factory

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

* 就这样 *

于 2012-08-26T09:51:21.933 回答