【问题标题】:Creating Django Form from more than two models从两个以上模型创建 Django 表单
【发布时间】:2015-07-05 01:54:11
【问题描述】:

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

我有这些模型:

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)

我必须创建一个包含所有三个模型的单一表单:问题、选择、答案。我知道这可以使用内联表单集来实现,例如

from django.forms.models import inlineformset_factory
inlineformset_factory(question, choice)

不清楚的地方:如何将所有三个模型都放在这里,比如

inlineformset_factory(question, choice, answer)

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

【问题讨论】:

  • 请看这里:kevindias.com/writing/… 我确定它是您正在寻找的圣杯。我没有测试过自己,但我喜欢这种方法。它使用 CBV

标签: django django-models inline-formset


【解决方案1】:

每个外键都需要一个内联表单集:

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

在您的模板中,访问字段就像访问普通的表单集/表单一样。

@Rexford 评论的链接是正确的,它和你想要的一样。您可以根据相同的“配方”示例找到基于函数的视图示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2023-04-05
    • 2017-05-07
    • 2010-10-28
    相关资源
    最近更新 更多