具有两种用户类型的 Django 项目。我跟着这个tutorial为内置用户模型提供两种类型的标志。当我尝试登录到 django rest_framework_simple_jwt 的登录端点响应时。覆盖保存方法是否有问题。
{ "non_field_errors": [ "No active account found with the given credentials" ] }
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)
最佳答案
我认为问题是当您尝试创建 Employee
对象时,您的 User
没有创建。一种方法是使用 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)
基本上,我们只想在用户保存在数据库中(并且有一个pk
)之后创建一个Employee
。
更多引用资料:https://docs.djangoproject.com/en/2.0/ref/signals/#post-save
关于django - 在django中用抽象用户覆盖用户模型的保存方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833246/