gpt4 book ai didi

python - 在 Django admin 中添加内联多对多对象

转载 作者:太空狗 更新时间:2023-10-29 17:03:02 24 4
gpt4 key购买 nike

我是 Django 的新手,已经阅读了有关其关系模型和内联管理表单的文档 (docs on InlineModelAdmin) 我正在努力弄清楚以下内容是否可以立即使用,或者我是否应该滚动我自己的表格。

假设我有两个对象:电影和导演,这是在模型声明中定义的多对多关系,如下所示:

class Film(Model):
director = ManyToManyField('Director')

现在,在 Film 对象的详细信息表单中,我想添加内联 Director 对象(它们只有一个名称字段作为唯一属性)。不仅选择现有实例,而且能够创建新实例,以 Film 对象的形式内联。

class DirectorInline(admin.TabularInline):
model = Director
extra = 3


class FilmAdmin(admin.ModelAdmin):
inlines = (
DirectorInline,
)

这会引发错误,因为它需要 Director 对象上的外键。在不创建自定义表单、验证器等的情况下,我想要实现的目标是可能的吗?任何正确方向的提示将不胜感激,提前致谢。

最佳答案

管理员中多对多字段的默认小部件或带有 filter_vertical 的小部件或 filter_horizo​​ntal 属性允许您添加新项目。该字段附近有一个绿色的“+”号,用于打开一个弹出窗口并添加新的 Director 实例。

但如果您需要内联样式管理,您应该引用 through-model .如果您不指定自定义模型,Django 会创建一个简单模型,其中包含指向 Director 和 Film 的 2 个外键。

所以你可以尝试像这样创建内联

class DirectorInline(admin.TabularInline):
model = Film.director.through
extra = 3

这不会引发异常并会生成内联表单,但您必须从下拉列表中选择董事。我认为您可以使用自定义表单覆盖它。

关于python - 在 Django admin 中添加内联多对多对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10904848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com