问题描述
我认为一个例子是描述问题的最好方式...
在 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 (将#修改为@)