【问题标题】:Displaying inline forms for all related objects in Django在 Django 中显示所有相关对象的内联表单
【发布时间】:2012-12-06 21:21:39
【问题描述】:

我正在尝试创建一个灵活的应用程序来管理调查。我想要的是一个 视图,显示与调查相关的所有问题、选项和后续问题。我有以下型号:

class Survey(models.Model):
   title = models.CharField(max_length=300)

class Question(models.Model):
   question_text = models.CharField(max_length=300)
   belongs_to_survey = models.ForeignKey('Survey', related_name='questions') 
   follow_up_to_answer = models.ForeignKey('Question', null=True, related_name='follow_up_questions')

class Option(models.Model):
   answer_text = models.CharField(max_length=200)
   belongs_to_question = models.ForeignKey('Question', related_name='options')

我研究了 inlineformset_factory,但这只允许“一级嵌套”。我所拥有的理论上是“无限的”

Survey -> Questions -> Options -> Follow-up-Questions -> Options --\
                                             ^\____________________/ 

我做错了吗?据我所见,这个问题应该很常见,但是 stackoverflow 和其他地方的问题数量表明并非如此。

【问题讨论】:

  • 所以您希望能够编辑所有问题并跟进调查的问题,对吗?你在使用 ModelForm 吗?
  • 正确,@czarchaic。是的,假设我为每个模型使用了一个 ModelForm。
  • 我不太明白你在说什么嵌套。如果您在问题模型中有 follow_up_to_answer,那么为什么不在某些调查中使用问题 ID 来订购它们。如果下一个问题取决于 Option(或上一个问题的答案),为什么 follow_up_to_answer 是 Question 的字段而不是 Option 的?

标签: django django-forms


【解决方案1】:

使用inlineformset_factory 两次:

  1. Survey 显示Question 实例
  2. 为每个Question 显示Option 实例

然后,在模板显示表单中,option_formset 实例在question_formset 的每个form 之后打印。

【讨论】:

  • 好吧,这必须递归地完成以显示每一层嵌套。因为每个Option 都可以有一个新的follow_up_question 提供可能无限嵌套的选项和问题。
猜你喜欢
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 2023-03-03
相关资源
最近更新 更多