我正在尝试创建自定义用户模型。此模型必须扩展另一个模型,并链接到内置的django用户。目前我有:
class Entity(models.Model):
name = models.CharField(max_length=256, null=True, blank=True)
class Profile(Entity):
user = models.OneToOneField(User, on_delete=models.CASCADE)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
但是当我尝试创建用户时,我收到错误:UNIQUE constraint failed: project_profile.entity_ptr_id
。
我是否需要先添加另一个函数来创建实体?或者我应该以另一种方式构建我的模型?
答案 0 :(得分:1)
create
方法,如果使用用户创建了Profile实例,它已保存在数据库中。你不需要save
分开。
即以下signls
足以保存和创建用户配置文件实例
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
答案 1 :(得分:0)
OneToOne关系意味着每个用户只能拥有一个配置文件。
将代码修改为
class Profile(Entity):
user = models.ForeignKey(User, on_delete=models.CASCADE)