在Django中扩展模型

时间:2017-02-26 14:42:08

标签: python django django-models

我正在尝试创建自定义用户模型。此模型必须扩展另一个模型,并链接到内置的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

我是否需要先添加另一个函数来创建实体?或者我应该以另一种方式构建我的模型?

2 个答案:

答案 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)