2016-05-06 24 views
1

user_oneとuser_twoがどちらの方法でもPersonまたはBusinessになる可能性があるため、会話モデルで2つの外部キーを参照したいと考えています。これを表現する最善の方法は何ですか?Djangoデータモデルで2つの外部キーを参照する

class Person(models.Model): 
    """ 
    Person model 
    """ 
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False) 
    avatar = models.ImageField(upload_to=get_upload_avatar_path, blank=True, null=True, default=None, max_length=255) 
    first_name = models.CharField(max_length=255) 
    last_name = models.CharField(max_length=255) 


class Business(models.Model): 
    """ 
    Business model 
` """ 
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False) 
    name = models.CharField(max_length=255, null=True, default=None) 


class Conversation(models.Model): 
    """ 
    Conversation model 
    Contains conversation relational data between registered users 
    """ 
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False) 
    #user_one = models.ForeignKey(Person, null=True, default=None) 
    #user_two = models.ForeignKey(Business, null=True, default=None) 


class ConversationReply(models.Model): 
    """ 
    Conversation reply model 
    Contains conversation reply data 
    """ 
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False) 
    date_time = models.DateTimeField(blank=True, null=True, default=None) 
    conversation = models.ForeignKey(Conversation, null=True, default=None) 
    reply = models.CharField(max_length=255) 
+0

[一般的な外部キー](https://docs.djangoproject.com/en/1.9/ref/contrib/)を調べるとよいでしょう。 contenttypes /#django.contrib.contenttypes.fields.GenericForeignKey)。 – ozgur

答えて

1

おそらくdjango model inheratanceを使用してエンティティモデルを作成します。 GenericForeignKeyフィルタリングを使用しているため、従来のように動作しないことを

class Entity(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False) 

    class Meta: 
     abstract = True 

class Person(Entity): 
    """ 
    Person model 
    """ 

    avatar = models.ImageField(upload_to=get_upload_avatar_path, blank=True, null=True, default=None, max_length=255) 
    first_name = models.CharField(max_length=255) 
    last_name = models.CharField(max_length=255) 


class Business(Entity): 
    """ 
    Business model 
` """ 
    name = models.CharField(max_length=255, null=True, default=None) 


class Conversation(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False) 
    content_object_1 = GenericForeignKey('content_type', 'object_1_id') 
    content_object_2 = GenericForeignKey('content_type', 'object_2_id') 

は注意してください。

+0

ご協力いただきありがとうございます。 'フィールドは、インストールされていない、または抽象的なモデル 'Entity'とのリレーションを定義しています。 ' – methuselah

+0

これは' entity_1'と 'entity_2'で発生します – methuselah

+0

これを解決するには、 ozgurが述べたようにGenericForeignKey'私はそれに応じて私の答えを編集しました。 –

関連する問題