如果是“额外”表单,则内联 Django 管理员的不同字段集

问题描述

我认为一个例子是描述问题的最好方式...

在 Django 2.2 中,假设您有一个模型 Foo,以及一个模型 Bar,它具有指向 Foo 的外键。

现在假设您设置了 Django 管理员,以便 Bar 实例在 Foo 更改视图中显示为内联:

class Baradmin(admin.StackedInline):
    model = Bar
    extra = 1

class FooAdmin(admin.ModelAdmin):
    model = Foo
    inlines = [Baradmin]

最后,假设我们正在查看名为 Foo 的已保存 foo1 实例的 changeview 表单。在该表单上,您将看到指向 Bar 的所有现有 foo1 实例的内联表单以及可用于创建新 Bar额外内联表单}} 实例,如果你愿意。

我想要做的是根据内联表单是代表已保存的 Bar 实例还是不代表已保存的“额外”表单,使字段集略有不同现有的 Bar 实例。具体来说,已保存的 Bar 应该有一个附加字段,而未保存的“额外”Bar 不应有。

我一直在试验 InlineModelAdmin 的“get_fieldsets()”方法,但我没有找到任何方法从该方法内部判断我们是否正在处理“额外”表单。此外,我不相信该方法对于每个单独的内联表单都被称为新鲜的,因此这可能不是初学者。

如果我使用自定义表单,我可以从该表单的 __init__() 方法内部判断该表单是否是“额外的”。如果表单是“额外”表单,这允许我删除一个字段,但如果我这样做,我会与字段集发生冲突,这对于表单的所有实例都是相同的。

有谁知道是否有可能使内联表单上的字段集有所不同,具体取决于它是处理内联模型的现有实例还是是否允许新实例?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)