我有几个与一对一关系的模型。例如
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中一样,但我希望必须有更好的解决方案。
如果你想知道为什么我需要一对一:评论在其他地方被大量使用,并且与不同的模型有不同的关系。
答案 0 :(得分:0)
inline_formset工厂是正确的。对此没有标准的通用视图,但是有一个第三方包具有通用视图来执行您想要的操作。它采用标准的Django方式做事。
https://github.com/AndrewIngram/django-extra-views
你可能想要使用CreateWithInlinesView。
答案 1 :(得分:0)
好吧,我找到了解决方案。
CreateWithInlinesView
与OneToOneField
完美配合(毕竟,1对1只是带约束的外键),但我的主要模型是Comment
,而不是{{1 }}。因此,我应在此视图中将Task
设置为Comment
字段,将model
设置为Task
。看起来很傻。我将创建自定义表单或查看我的模型结构。