Django:如何从其他模型创建动态表单

时间:2012-08-26 08:43:41

标签: django forms django-models django-forms

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

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。

思想?

2 个答案:

答案 0 :(得分:0)

您可以使用django models formsets

构建包含多个问题的表单

旁注,我认为您需要从ForiegnKeyOneToMany而非Survey的{​​{1}}(Question)关系。由于调查有很多问题,但问题实例仅在一项调查中。

答案 1 :(得分: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))

*这就是*