Администратор django переместит аутентификационные модели в другой раздел - PullRequest
0 голосов
/ 20 февраля 2019

Я использую Django 2.x

Я создал пользовательскую модель, расширив AbstractModel в authentication приложении

class User(AbstractUser):
    pass

и обновилв настройках

AUTH_USER_MODEL = 'authentication.User'

Это привело к двум разделам в админ-панели.Один раздел аутентификация содержит Пользователь модель, а по умолчанию Аутентификация и авторизация содержит только Группа модель.

Я хочу переместить Пользователь до Аутентификация и авторизация или Группа до Аутентификация , чтобы обе модели могли быть вместе в секции.

Для этого я добавил это в authentication.admin.py

apps.get_model('auth.Group')._meta.app_label = 'authentication'

Для перемещения Группа в Аутентификация .

После запуска

python manage.py makemigrations

Генерирует миграцию в приложении auth django

Migrations for 'auth':
  /Users/anuj/.local/share/virtualenvs/originor_py-Vd6fDdN7/lib/python3.6/site-packages/django/contrib/auth/migrations/0010_auto_20190220_0238.py
    - Remove field permissions from group
    - Alter field groups on user
    - Delete model Group

А при миграции миграций ./manage.py migrate выдает ошибку как

ValueError: The field auth.User.groups was declared with a lazy reference to 'authentication.group', but app 'authentication' doesn't provide model 'group'.

Как я могу переместить модель Group в другой раздел администратора Django?
Нужно ли создавать собственную модель группы?

1 Ответ

0 голосов
/ 20 февраля 2019

Вы переопределили AbstractUser, который наследует AbstractBaseUser и PermissionsMixin, как показано ниже class AbstractUser(AbstractBaseUser, PermissionsMixin):

Вы можете видеть атрибут groups в django.contrib.auth.models.PermissionsMixin

class PermissionsMixin(models.Model):
    """
    A mixin class that adds the fields and methods necessary to support
    Django's Group and Permission model using the ModelBackend.
    """
    ...
    groups = models.ManyToManyField(
        Group,
        verbose_name=_('groups'),
        blank=True,
        help_text=_(
            'The groups this user belongs to. A user will get all permissions '
            'granted to each of their groups.'
        ),
        related_name="user_set",
        related_query_name="user",
    )
    ...

Создайте CustomGroup модель и добавьте эту модель к атрибуту groups следующим образом.

class User(AbstractUser):
    ...
    groups = models.ManyToManyField(
        CustomGroup,
        verbose_name=_('groups'),
        blank=True,
        help_text=_(
            'The groups this user belongs to. A user will get all permissions '
            'granted to each of their groups.'
        ),
        related_name="user_set",
        related_query_name="user",
    )
    ...

Это поможет вам переопределить модель по умолчанию Group, измененную с помощью CustomGroup модель

...