2017-02-26 4 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の関係は、ユーザーごとにプロファイルを1つしか持てないことを意味します。あなたはcreateメソッドを使用している場合、それはすでにデータベースに保存されたユーザーとプロファイルのインスタンスを作成する場合

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

ユーザープロファイルのインスタンスを保存し、作成するための十分ですが、私はプロファイルにエラーが届きません。エラーはエンティティ上にあります。私はプロファイルを1人のユーザに関連付ける必要があります。 – Rizhiy

1

にコードを修正します。あなたはsave seperatlyする必要はありません。次signlsすなわち はい

@receiver(post_save, sender=User) 
def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     Profile.objects.create(user=instance) 
関連する問題