2017-10-10 98 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