2017-10-10 6 views
0

Pour une raison quelconque, j'ai trois modèles liés à l'authentification, mais dans Django Admin ils apparaissent dans deux groupes différents. Par exemple:Modification du groupe d'un modèle dans Django Admin

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

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

Apparemment, ils doivent appartenir à un groupe et je souhaite les déplacer dans un groupe.

Je suis tombé sur ce Q/A partir il y a quelques années:

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

Je me demande s'il y a un moyen plus facile maintenant dans Django 1.11 comme l'utilisation d'un class Meta: dans le modèle ou admin.py. En parcourant la documentation, je n'ai encore rien trouvé.

+1

vous pouvez utiliser le modèle de procuration qui aidera à montrer votre modèle dans différentes applications dans l'admin –

Répondre

0

Je devais combiner ce que Mohammad et NeErAj suggéraient.

Lorsque j'ai essayé de déplacer Groups à la section Authorization, qui est une application contenant un modèle personnalisé User, il a créé des doublons des groupes. Django voulait toujours insérer la valeur par défaut auth_group que je ne pouvais pas comprendre comment se débarrasser de.

# ./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 

Depuis que je travaillais avec un modèle personnalisé User, je pensais que ce serait plus facile de les déplacer vers app_label = 'auth'. De cette façon, je n'aurais pas à me battre avec la valeur par défaut auth_group. Nous avons fini par faire ce qui suit:

# ./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) 

Cela a tout pour ressembler à:

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

Vous pouvez utiliser app_label dans la classe Meta. Faites-moi savoir si vous voulez la valeur de app_label.

+0

Ce n'est vraiment pas une bonne idée car les migrations générées seront éventuellement créées dans des paquets de site (et donc ne seront pas enregistrées dans le contrôle de source). – Mario