Используйте пользовательскую модель вместо экземпляра пользователя через AUTH_USER_MODEL в TokenAuthentication - PullRequest
0 голосов
/ 12 июля 2020

Я использую TokenTokenAuthentication для создания токена для каждого создаваемого пользователя. Я использую пользовательскую модель (Utilisateur) и AUTH_USER_MODEL. Для модели требуется поле set_password, и, судя по тому, что я видел в Интернете, я установил для него значение None, я попытался установить значение по умолчанию, но продолжаю получать ту же ошибку, когда пытаюсь подключиться к странице администратора django, чтобы убедиться, что токены фактически создаются для каждого нового пользователя через таблицу Token. Может ли кто-нибудь помочь мне определить правильную конфигурацию, потому что токен не создан.

Ошибка: Объект «NoneType» не вызывается при попытке подключения на страницу django администратора введите описание изображения здесь

Код models.py

from django.contrib.auth.models import UserManager

class Utilisateur(models.Model):
    id = models.BigAutoField(primary_key=True)
    matricule = models.CharField(unique=True, max_length=5, blank=True, null=True)
    user_name = models.CharField(unique=True, max_length=30, blank=True, null=True)
    password = models.CharField(max_length=30, blank=True, null=True)
    nom = models.CharField(max_length=20, blank=True, null=True)
    prenom = models.CharField(max_length=20, blank=True, null=True)
    tel = models.CharField(unique=True, max_length=10, blank=True, null=True)
    email = models.CharField(unique=True, max_length=300, blank=True, null=True)
    fonction = models.CharField(max_length=50)
    entreprise = models.CharField(max_length=20, blank=True, null=True)
    id_type_utilisateur = models.ForeignKey(TypeUtilisateur, models.DO_NOTHING, db_column='id_type_utilisateur')
    id_site = models.ForeignKey(Site, models.DO_NOTHING, db_column='id_site')

    REQUIRED_FIELDS = ['password']
    USERNAME_FIELD = 'user_name'
    is_anonymous = False
    is_authenticated = False
    is_active = False
    set_password = None

    objects = UserManager()

    class Meta:
        managed = False
        db_table = 'utilisateur' 

код файла signal.py

from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver
from rest_framework.authtoken.models import Token


@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
    if created:
        print("AUTHENTIFICATION")
        Token.objects.create(user=instance)

и файл settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
    'Dashboard',
    'frontend',
    'rest_framework.authtoken',
]


REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ]
}

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