django пользовательская пользовательская модель аутентификации и авторизации - PullRequest
1 голос
/ 09 мая 2020

Я создал настраиваемую модель пользователя перед выполнением любой миграции , и я хотел переместить ее из панели приложения в панель авторизации на странице администратора.

Для этого я создал модель пользователя прокси:

class User(AbstractUser):
    pass

class ProxyUser(User):
    pass

    class Meta:
        app_label = 'auth'
        proxy = True

, а затем в admin.py:

from django.contrib.auth.admin import UserAdmin
from .models import ProxyUser

admin.site.register(ProxyUser, UserAdmin)  

enter image description here

Проблема в том, что Таблица auth_permission имеет разрешения для пользователя и proxyuser. enter image description here

enter image description here enter image description here

Не понимаю, почему, если я использую proxy и была создана только одна таблица пользователей, таблица разрешений ведет себя так, как если бы их было два (proxyuser и user). Я что-то упускаю? Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Django использует структуру типов контента для отслеживания «разрешений» для различных моделей. Прокси-модели получают свои собственные разрешения.

Это объясняется в разделе аутентификации Django docs :

Прокси-модели работают точно так же, как и конкретные модели. Разрешения создаются с использованием собственного типа контента прокси-модели. Прокси-модели не наследуют разрешения конкретной модели, которую они подклассифицируют

Я считаю, что то, чего вы пытаетесь достичь с помощью прокси-модели, не нужно. Я лично не стал бы сильно беспокоиться о том, что «Пользователи» появятся в отдельном разделе в Django Admin. Вместо этого вы добавите ненужную сложность коду, используя прокси-модель (будущий разработчик / вам может быть интересно, использовать ли пользовательский класс User или класс ProxyUser).

0 голосов
/ 09 мая 2020

Возможно, вы выполнили все миграции, а не только для своих приложений. Если вы не укажете приложение для миграции, Django выполнит все миграции. С другой стороны, возможно, вы не сможете войти в админку, если не сделаете этого.

...