如何在夹层中使用ADMIN_REMOVAL

时间:2015-05-25 07:14:43

标签: django mezzanine

在我的新夹层网站中,我想从管理菜单中删除一些模型。所以我用我想在管理菜单中看到的模型定义了ADMIN_MENU_ORDER。这导致其他模型不在列表中(BlogPostThreadedCommentSiteRedirect),列在我想要的模型下面。

所以我用它来删除它们:

ADMIN_REMOVAL = ('blog.BlogPost',
                 'generic.ThreadedComment',
                 'sites.Site',
                 'redirects.Redirect',)

(我只是剪切并粘贴默认的ADMIN_MENU_ORDER。) 但由于ImportError中的mezzanine.urls(第19-31行),这无效:

# Remove unwanted models from the admin that are installed by default with
# third-party apps.
for model in settings.ADMIN_REMOVAL:
    try:
        model = tuple(model.rsplit(".", 1))
        exec("from %s import %s" % model)
    except ImportError:
        pass
    else:
        try:
            admin.site.unregister(eval(model[1]))
        except NotRegistered:
            pass

所以我改变了ADMIN_REMOVAL

ADMIN_REMOVAL = ('blog.models.BlogPost',
                 'generic.models.ThreadedComment',
                 'django.contrib.sites.models.Site',
                 'django.contrib.redirects.models.Redirect',)

但是,虽然此代码行中没有ImportErrorNotRegistered,但这仍然没有效果。

似乎还有一些东西,我还没有理解。

更新 我做了一些调试。这条线

            admin.site.unregister(eval(model[1]))
来自mezzanine/urls.py

(上面引用过)实际上调用mezzanine.boot.lazy_admin.unregister,如下所示:

def unregister(self, *args, **kwargs):
    self._deferred.append(("unregister", args, kwargs))

看起来应该在调用引导过程mezzanine.boot.lazy_admin.lazy_registration之后,应用所有延迟注册和取消注册:

def lazy_registration(self):
    for name, deferred_args, deferred_kwargs in self._deferred:
        getattr(AdminSite, name)(self, *deferred_args, **deferred_kwargs)

但实际上mezzanine.boot.lazy_admin.lazy_registrationmezzanine/urls.py中的代码之前被称为,它会尝试从ADMIN_REMOVAL取消注册模型。

(我添加了这样的打印语句并得到以下输出:)

mezzanine/urls.py

for model in settings.ADMIN_REMOVAL:
    [...]
        try:
            print 'unregistering', model[1]
            admin.site.unregister(eval(model[1]))
        except NotRegistered:
            pass

mezzanine/boot/lazy_admin.py

def lazy_registration(self):
    print 'lazy_registration occurs'
    for name, deferred_args, deferred_kwargs in self._deferred:
        getattr(AdminSite, name)(self, *deferred_args, **deferred_kwargs)

输出

lazy_registration occurs
unregistering BlogPost
unregistering ThreadedComment
unregistering Site
unregistering Redirect

我会在Github

上发布此问题

0 个答案:

没有答案