在Django Admin中更改模型组

时间:2017-10-10 18:03:21

标签: django django-models django-admin

无论出于何种原因,我有三个与身份验证相关的模型,但在Django Admin中,它们显示在两个不同的组中。例如:

AUTHORIZATION
-------------
Security Questions
Users

AUTHORIZATION AND AUTHENTICATION
--------------------------------
Groups

似乎他们应该在一个小组之下,我想将他们移到一个小组之下。

几年前我遇到过这个Q / A:

Adding a model in Django Admin to the User/Group models?

想知道Django 1.11中是否有更简单的方法,比如在模型中使用class Meta:admin.py。浏览文档并找不到任何东西。

3 个答案:

答案 0 :(得分:3)

我实际上必须结合Mohammad和NeErAj所建议的内容。

当我尝试将Groups移动到包含自定义Authorization模型的应用的User部分时,它会创建组的重复项。 Django仍然希望插入默认的auth_group,我无法弄清楚如何摆脱它。

# ./models.py
from django.contrib.auth.models import Group

class Group(Group):
    pass

    class Meta:
    app_label = 'authentication'
# ./admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User, SecurityQuestions, Group

admin.site.register(User, UserAdmin)
admin.site.register(SecurityQuestions)
admin.site.register(Group)
AUTHORIZATION
-------------
Groups
Security Questions
Users

AUTHORIZATION AND AUTHENTICATION
--------------------------------
Groups

由于我使用的是自定义User模型,因此我认为将它们移动到app_label = 'auth'会更容易。这样我就不必使用默认的auth_group。结束了以下操作:

# ./models.py
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    ...

    class Meta:
        db_table = 'Users'

class SecurityQuestions(models.Model):
    ...

    class Meta:
        app_label = 'auth'
        db_table = 'Security_Questions'
        verbose_name = 'Security Question'
        verbose_name_plural = 'Security Questions'

 class ProxyUser(User):
     pass

     class Meta:
         app_label = 'auth'
         proxy = True
         verbose_name = 'User'
         verbose_name_plural = 'Users'
# ./admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User, SecurityQuestions, ProxyUser

admin.site.register(ProxyUser, UserAdmin)
admin.site.register(SecurityQuestions)

这看起来像是:

AUTHORIZATION AND AUTHENTICATION
--------------------------------
Groups
Security Questions
Users

答案 1 :(得分:1)

您可以在Meta类中使用app_label

如果您想要app_label的价值,请告诉我。

答案 2 :(得分:0)

最简单的解决方案是使用django-modeladmin-reorder:它允许您在管理站点中重新排序和合并应用程序。

这是此特定示例所需的配置:

ADMIN_REORDER = [
    {
        'app': 'auth',
        'models': [
            'my_custom_auth_app.User',
            'my_custom_auth_app.SecurityQuestions',
            'auth.Group',
        ]
    }
]

该应用程序在后台使用了一个中间件,该中间件在呈现管理模板时会更改app_list上下文。