从两个以上的模型创建Django表单

时间:2015-04-26 18:29:14

标签: django django-models inline-formset

我正在构建一个Quiz应用程序,用户(内容创建者或作者)可以创建测验(基于选择的问题及其解决方案)。

我有这些模特:

class question(models.Model):   

    text = models.TextField(max_length=512, blank=False)
    author = models.OneToOneField(User)
    doc = models.DateField(auto_now_add=True)
    dscore = models.IntegerField()
    btax = models.CharField(max_length=3)
    subj = models.CharField(max_length=3)
    qtype = models.CharField(max_length=1)
    flag = models.CharField(max_length=16)
    tags = TaggableManager()


class choice(models.Model):

    text = models.CharField(max_length=64, blank=False)
    ques = models.ForeignKey('question')
    tags = TaggableManager()


class answer(models.Model):

    text = models.TextField(max_length=512)
    ques = models.ForeignKey('question')
    choice = models.ForeignKey('choice')
    tags = models.CharField(max_length=32)

我必须创建一个包含所有三个模型的单一表单:问题,选择和答案。我知道这可以使用像

这样的内联formset来实现
from django.forms.models import inlineformset_factory
inlineformset_factory(question, choice)

不清楚的是:如何将所有三个模型放在这里,如

inlineformset_factory(question, choice, answer)

并且还能够指定要在表单上显示的字段。

1 个答案:

答案 0 :(得分:2)

每个外键需要一个内联formset:

QuestionChoiceFormset = inlineformset_factory(question, choice)
QuestionAnswerFormset = inlineformset_factory(question, answer)

在您的模板中,访问字段就像普通的formset / form一样。

@Rexford评论的链接是现货,它与你想要的一样。您可以找到基于功能的视图的示例,也可以基于相同的'配方'示例