Назначение групп и разрешений отсутствует при использовании пользовательской модели пользователя - PullRequest
2 голосов
/ 13 июля 2020

Я создаю приложение с несколькими ролями, определенными через Django Группы. Я начал с пользовательской модели пользователя, определенной ниже.

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

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

from django.db import models
from django.contrib.auth.models import AbstractUser, AbstractBaseUser, BaseUserManager, PermissionsMixin
import random
import string
from slugify import slugify


# Create your models here.

class MyAccountManager(BaseUserManager):
    def create_user(self, email, password=None):
        if not email:
            raise ValueError("You must have an email address")
        user = self.model(
            email=self.normalize_email(email),
        )
        user.set_password(password)
        user.save(using=self._db)
        return user
    
    def create_superuser(self, email, password):
        user = self.create_user(
            email=self.normalize_email(email),
        )
        user.set_password(password)
        user.is_admin=True
        user.is_staff=True
        user.is_superuser=True
        user.save(using=self._db)
        return user


#custom user account model
class User_Account(AbstractUser):
    email = models.EmailField(verbose_name='email', max_length=60, unique = True)
    date_joined = models.DateTimeField(verbose_name="Date Joined", auto_now_add=True)
    last_login = models.DateTimeField(verbose_name="Last Login", auto_now=True)
    username = models.CharField(max_length=100, null=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []
    
    objects = MyAccountManager()

    def __str__(self):
        return self.email

Когда я создаю новую группу с настраиваемой моделью пользователя, группа автоматически назначается всем созданным пользователям. Я воспроизвел это поведение как программно, так и через администратора Django. Когда я использую модель пользователя по умолчанию, создание группы не назначает группы всем пользователям автоматически. Я также обнаружил, что при использовании пользовательской модели Django администратор для пользователей не такой же (поля назначения групп и разрешений не заполнены - снимки экрана ниже) Странно неполно Django Интерфейс администратора с отсутствующими группами и разрешениями доступные поля

Нормальный Django Интерфейс администратора с назначением групп и разрешений, как ожидалось - модель пользователя по умолчанию

1 Ответ

0 голосов
/ 13 июля 2020

Мне удалось исправить проблему в панели администратора. Кажется, это проблема визуального рендеринга, вызванная неправильным классом Admin.

Ошибка была вызвана следующим:

    filter_horizontal = ()
    list_filter = ()
    fieldsets = ()

Я действительно добавил правильные параметры в класс выше, но забыл закомментировать / удалить эти строки. Работает правильно после их комментирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...