Django表单创建具有一对一关系的多个对象

时间:2015-04-21 22:49:19

标签: python django

我有几个与一对一关系的模型。例如

class Task(models.Model):
     initial_comment = models.OneToOneField('Comment')
     # A pack of other fields

class Comment(models.Model)
    body = RichTextField()
    # A pack of other fields

我想创建"创建视图"基于表单,使用户能够在那里创建任务和初始评论。

  • 我无法使用CreateView,因为它仅基于一种模式
  • 我无法使用ModelForm,因为它仅基于一种模式
  • 我可以创建多个表单,但我无法将它们合并为一个表单集(表单不同)
  • 我觉得" inlineformset_factory" (InlineFormSet)应该在这里使用,但我不确定它是否最合适。是否有任何第三方Django应用程序可以做到这一点?

当然我可以自己创建表单,但我不想复制/粘贴所有字段,类型,本地化标签,验证等。我只想列出他们的名字(如fields attibute)。

我还可以拥有2个表单并在任何地方支持它们并手动跟踪依赖项(首先保存注释),就像在How can create a model form in django with a one-to-one relation with another model中一样,但我希望必须有更好的解决方案。

如果你想知道为什么我需要一对一:评论在其他地方被大量使用,并且与不同的模型有不同的关系。

2 个答案:

答案 0 :(得分:0)

inline_formset工厂是正确的。对此没有标准的通用视图,但是有一个第三方包具有通用视图来执行您想要的操作。它采用标准的Django方式做事。

https://github.com/AndrewIngram/django-extra-views

你可能想要使用CreateWithInlinesView。

答案 1 :(得分:0)

好吧,我找到了解决方案。

CreateWithInlinesViewOneToOneField完美配合(毕竟,1对1只是带约束的外键),但我的主要模型是Comment,而不是{{1 }}。因此,我应在此视图中将Task设置为Comment字段,将model设置为Task。看起来很傻。我将创建自定义表单或查看我的模型结构。