我有两个模型:问题和调查
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。
思想?
答案 0 :(得分:0)
旁注,我认为您需要从ForiegnKey
到OneToMany
而非Survey
的{{1}}(Question
)关系。由于调查有很多问题,但问题实例仅在一项调查中。
答案 1 :(得分:0)
*您最初需要的是多对多关系中的额外字段*
在你的模特中,我想念一个叫做Answer
的第三节课。 Answer
是Survey
对Question
的回复。你的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))
*这就是*