Django 如何在一个模板中显示共享关系的两个表单?

Django 如何在一个模板中显示共享关系的两个表单?,django,Django,我有两个模型表单,它们之间共享foreignkey关系,我想在一个模板中显示这两个模型表单,以便用户能够同时提交这两个模型表单。我知道如何通过基于函数和基于类的视图呈现它们,但我对外键感到困惑,如何表示当一个类型名出现在Author modelform字段中时,它会出现在Book model form的Author字段中 你的问题不清楚你为什么想要两种形式。如果一个人正在编辑一本书,而作者是FK to Book,那么他会希望作者列表在书的形式中显示为下拉列表,对吗?所以,一种形式。当使用Mode

我有两个模型表单,它们之间共享foreignkey关系,我想在一个模板中显示这两个模型表单,以便用户能够同时提交这两个模型表单。我知道如何通过基于函数和基于类的视图呈现它们,但我对外键感到困惑,如何表示当一个类型名出现在Author modelform字段中时,它会出现在Book model form的Author字段中

你的问题不清楚你为什么想要两种形式。如果一个人正在编辑一本书,而作者是FK to Book,那么他会希望作者列表在书的形式中显示为下拉列表,对吗?所以,一种形式。当使用ModelForm的约定时,这几乎是自动发生的

当然,这假设所有作者都已经在数据库中,并且/或者您在一个单独的视图中有一个单独的表单,在该视图中管理作者。如果你在问,你如何能够在创建新作者的同时编辑一本书, 这相当复杂,因为您需要(例如)在弹出窗口中显示一个新的作者表单,然后将添加的结果发送到图书编辑表单中的“作者”下拉列表中(就像在Django管理员中所做的那样)


但按照惯例,我们假设当您进入图书表单时,所有作者都已存在,您可以在下拉列表中将其显示为选项。

您可以使用modelformset。检查有关如何实施的文档。
class Author(forms.ModelForm):
    name = models.CharField(max_length=100)

class Book(forms.ModelForm):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)