仅显示内联"添加对象"如果没有对象,则为字段

时间:2017-03-31 20:37:37

标签: django

在我的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。

1 个答案:

答案 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