2017-02-26 130 views
0

我正在嘗試創建一個自定義用戶模型。這個模型必須擴展另一個模型,並鏈接到內置的django用戶。目前,我有:在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

OneToOne關係表示每個用戶只能有一個配置文件。

的代碼修改,以

class Profile(Entity): 
    user = models.ForeignKey(User, on_delete=models.CASCADE) 
+0

是的,但我不會在輪廓得到一個錯誤。錯誤在實體上。我需要將配置文件與僅一個用戶相關聯。 – Rizhiy

1

如果你,如果你使用create方法創建與用戶就已經保存在數據庫中的配置文件實例。你不需要save分隔。 即以下signls足夠用於保存和創建的用戶配置文件實例

@receiver(post_save, sender=User) 
def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     Profile.objects.create(user=instance)