我的模型结构如下:
class Survey(models.Model):
name = models.CharField(max_length=64, unique=True)
class Meta:
permissions = (
(
"view_stats",
_("Can see statistics on surveys"),
),
)
class Question(models.Model):
text = models.CharField(max_length=64, unique=True)
multiple_choice = models.BooleanField(
default=False, null=False, verbose_name=_("Multiple choice")
)
respondents_particulars = models.BooleanField(
default=False, null=False, verbose_name=_("Respondents particulars")
)
class SurveyQuestion(models.Model):
survey = models.ForeignKey(Survey, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
class Answer(models.Model):
text = models.CharField(max_length=16, unique=True)
class QuestionAnswer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
answer = models.ForeignKey(Answer, on_delete=models.CASCADE)
我不使用 ManyToManyField
来避免问题的关系答案不同步的问题,因为答案可以同时是多个问题的一部分,但这不是问题的重点。
现在,基于结构,我想简化添加调查的方式。在管理中,我必须创建调查对象,然后创建一些问题,使用 SurveyQuestion
将它们连接起来,添加问题的答案并以相同的方式连接它们。
如何创建表单,让我可以创建调查,并可以为现有调查选择问题,并为调查添加(多个)新问题以及现有答案、新答案或同时添加两者。
我想我应该使用 ModelForms
和 formsets
但我不知道如何正确链接它们以获得预期的效果,即为 {{1} 的每个位置创建子表单集} 表单集。