Переопределение метода сохранения модели User с абстрактным пользователем в django - PullRequest
0 голосов
/ 13 июня 2018

Проект Django с несколькими типами пользователей.Я следовал этому уроку , чтобы дать два типа флагов встроенной пользовательской модели.Когда я пытаюсь войти в конечную точку входа в django rest_framework_simple_jwt, я получаю ответ.Есть ли проблема в переопределении метода сохранения.

{"non_field_errors": ["Не найдена активная учетная запись с данными учетными данными"]}

class User(AbstractUser):
    email = models.EmailField(unique=False,)
    first_name = models.CharField(max_length=30, blank=True)
    last_name = models.CharField(max_length=30, blank=True)
    date_joined = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_employee=models.BooleanField(default=False)
    is_manager=models.BooleanField(default=False)

    def save(self,*args,**kwargs):
        if self.is_employee:
                Employee.objects.create(manager=self)
        super(User,self).save(*args,**kwargs)

1 Ответ

0 голосов
/ 13 июня 2018

Мне кажется, проблема в том, что ваш User не создается при попытке создать объект Employee.Одним из подходов может быть использование сигнала post_save следующим образом:

from django.db import models
from django.dispatch import receiver

class User(AbstractUser):
    email = models.EmailField(unique=False,)        
    # ...other fields
    # and don't override save()

@receiver(models.signals.post_save, sender=User)
def user_created(sender, instance, created, **kwargs):
    if created and instance.is_employee:
        Employee.objects.create(manager=instance)

По сути, мы хотим создать Employee только после того, как пользователь сохранен (и имеет pk) в базе данных.

Дополнительные ссылки: https://docs.djangoproject.com/en/2.0/ref/signals/#post-save

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