2017-10-10 101 views
0

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

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

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

看起来像他们应该在一个小组下,我想将他们移到一个小组下。

我碰到这个Q/A从几年前:

如果有一个更简单的方法现在在Django 1.11像在模型或 admin.py使用 class Meta:

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

奇迹。浏览文档,还没有遇到任何问题。

+1

您可以使用代理模式,将有助于显示在不同的应用模型在管理 –

回答

0

我实际上必须结合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

您可以在Meta类中使用app_label

让我知道你是否想要app_label的价值。

+0

这实在不是一个好主意,因为生成的迁移可能会在站点包中创建(因此不会检入到源代码管理中)。 – Mario