在Django Admin中更改模型组

soc*_*pet 3 django django-models django-admin

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

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

AUTHORIZATION AND AUTHENTICATION
--------------------------------
Groups
Run Code Online (Sandbox Code Playgroud)

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

几年前,我遇到了这个问题:

在Django Admin中将模型添加到用户/组模型?

想知道Django 1.11中现在是否有更简单的方法,例如class Meta:在模型或in中使用admin.py。查看文档,还没有发现任何东西。

soc*_*pet 5

实际上,我必须结合穆罕默德和NeErAj的建议。

当我试图移动GroupsAuthorization部分,它是含有一个自定义的一个应用程序User的模式,它创建的组的重复。Django仍然想插入默认值auth_group,我无法弄清楚该如何删除它。

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

class Group(Group):
    pass

    class Meta:
    app_label = 'authentication'
Run Code Online (Sandbox Code Playgroud)
# ./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)
Run Code Online (Sandbox Code Playgroud)
AUTHORIZATION
-------------
Groups
Security Questions
Users

AUTHORIZATION AND AUTHENTICATION
--------------------------------
Groups
Run Code Online (Sandbox Code Playgroud)

由于我使用的是自定义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'
Run Code Online (Sandbox Code Playgroud)
# ./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)
Run Code Online (Sandbox Code Playgroud)

这使一切看起来像:

AUTHORIZATION AND AUTHENTICATION
--------------------------------
Groups
Security Questions
Users
Run Code Online (Sandbox Code Playgroud)

  • 这是找到的最佳解决方案,但它会在 contrib\auth\migrations 目录中创建一个迁移文件。您必须删除它以避免在其他项目中创建。 (3认同)