2015-01-24 20 views
5

Czy możliwe jest przeniesienie domyślnego modelu Grupy z sekcji "Uwierzytelnianie i autoryzacja" (na stronie administratora Django) do niestandardowego i jak to osiągnąć?Jak przenieść model do innej sekcji w administratorze strony Django?

Zacznijmy od początku innymi słowami.

Mam bardzo prostą aplikację "accounts" w moim projekcie Django.

plik models.py wygląda jak poniżej:

from django.contrib.auth.models import AbstractUser 


class User(AbstractUser): 
    def __str__(self): 
     return self.email 

plików serializers.py:

from rest_framework import serializers 
from django.contrib.auth.models import Group 
from django.contrib.auth import get_user_model 


class GroupSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Group 


class UserSerializer(serializers.HyperlinkedModelSerializer): 
    groups = serializers.HyperlinkedRelatedField(
     many=True, 
     required=False, 
     read_only=True, 
     view_name="group-detail" 
    ) 

    class Meta: 
     model = get_user_model() 
     exclude = ('user_permissions',) 

Teraz na stronie admina mam dwie sekcje: 'Konta' i „uwierzytelnianie i autoryzacja ". Sekcja "Konta" zawiera tabelę "Użytkownicy" (dla modelu użytkownika), a sekcja "Uwierzytelnianie i autoryzacja" zawiera tabelę "Grupy" (dla domyślnego modelu grupy autoryzacji Django).

Moje pytanie brzmi - czy jest możliwe i jak przenieść tabelę grup (model) do sekcji "Rachunki"?

Próbowałem nawet utworzyć niestandardowy model "Grupy" oparty na domyślnym modelu grupy autorów Django, ale utknąłem w wyjątkach migracji.

+0

Jaka jest struktura URL, której szukasz? Więc 2 aplikacje będą pod kontem? –

+0

Myślę, że to, o co prosisz, to wyświetlenie modelu użytkownika w witrynie administratora z większą liczbą funkcji. Aby to zrobić, musisz wyrejestrować model użytkownika, a następnie utworzyć model administracyjny z żądanymi polami, a następnie ponownie zarejestrować model użytkownika. Zobacz http://stackoverflow.com/questions/2552516/changing-user-modeladmin-for-django-admin – abdul

Odpowiedz

6

Czy można przenieść domyślny model Grupy z sekcji "Uwierzytelnianie i autoryzacja" (w witrynie administratora Django) do niestandardowego i jak to osiągnąć?

Tak, jest to możliwe.

1) Można przenieść swój model do sekcji auth, wystarczy dodać do swojej klasy:

class Meta: 
    app_label = 'auth' 

2) Można przenieść Group i modele użytkownika do sekcji aplikacji dla tego wariantu należy:

modelu użytkownik

Override i dodać go do swojej aplikacji

from django.contrib.auth.models import AbstractUser 


class CustomUser(AbstractUser): 
    pass 

należy również dodać do ustawień projektu AUTH_USER_MODEL = 'your_app.CustomUser'

Nie zapomnij zadeklarować w admin.py z aplikacji:

class UserAdmin(admin.ModelAdmin): 
    pass 


admin.site.register(CustomUser, UserAdmin) 

Dla modelu grupowego umieścić ten kod w admin.py:

from django.db.models.loading import get_models 
from django.contrib.auth import models 

models = get_models(models) 
models[1]._meta.app_label = 'your_app' 

3) Możesz zajrzeć django-admin-tools

+0

Dzięki. Tego właśnie szukałem. – tommus

+0

'od django.db.models.loading import get_models' jest przestarzałe w Django 1.9 i górny –

+0

Aby przenieść model grupy w django 2+, działa to dobrze, aby umieścić w swoim admin.py. 'from django.apps import apps' ' apps.get_model ('auth.Group') ._ meta.app_label = '' ' –