在我的Django应用程序中,我有一个模型,X.它有一个相关的/辅助模型Y,其中包含一些关于它的额外信息。 Y的实例与ForeignKey
的X绑定(即Y
包含models.ForeignKey(X)
)。
我的admin.py
:
class YInline(admin.TabularInline):
model = Y
extra = 1
这样可以正常工作,但添加新Y的内联字段始终显示:添加新X时,以及编辑已绑定了一些Y的现有X时。我想仅在X没有Ys绑定的情况下显示该字段(要么是因为它正在被创建,要么因为之前没有为它分配过Y)。如果我们正在编辑已经包含一些Y的X,则不应显示内联;用户将使用"添加另一个Y"按钮,如果他们想添加一个。
我怎样才能做到这一点?我在撰写本文时使用的是最新的稳定版Django,1.10。
答案 0 :(得分:2)
您可以覆盖YInline
类的get_extra方法,如下所示:
class YInline(admin.TabularInline):
model = Y
# extra is remove here, is overidden below
def get_extra(self, request, obj=None, **kwargs):
# obj is the parent model, for your case X.
# If X has no Y attribute (thus X is created), return 1 extra inline
# If X exists, but has null Y's, return 1 extra inline
if not hasattr(obj, '<related_name_here>') or not obj.<related_name_here>.exists():
return 1
# If X exists and has some pre-saved Y's, return 0 extra inlines
return 0