2016-12-04 10 views
0

私はDjangoのアプリで、以下のデータモデルを実装しようとしています:ジャンゴ1対1および1対多の関係

Aプロジェクトは、3つのコンテナで構成されています: 1) アクショナブル2) を参照します3)Backburner

エントリはプロジェクト内で作成することができ、いずれかのコンテナに割り当てる必要があります(自由に浮動したままにすることはできません)。

したがって、Projectには常に3つのコンテナが含まれていますが、いずれも空にすることができます。エントリは常にコンテナの1つ(そして1つだけ)にあります。ただし、エントリをコンテナからコンテナに切り替えることはできます。

ここは私の試みです。これはまったく合理的ですか?

class Project(models.Model): 
    project_title = models.CharField() 
    created_date = models.DateTimeField('date created') 

class References(models.Model): 
    project = models.OneToOneField(
     Project, 
     on_delete=models.CASCADE, 
     primary_key=True, 
    ) 

class BackburnerItems(models.Model): 
    project = models.OneToOneField(
     Project, 
     on_delete=models.CASCADE, 
     primary_key=True, 
    ) 

class ActionSteps(models.Model): 
    project = models.OneToOneField(
     Project, 
     on_delete=models.CASCADE, 
     primary_key=True, 
    ) 

class Entry(models.Model): 
    title = models.CharField(max_length=200) 
    description = models.CharField(max_length=200) 
    action_steps = models.ForeignKey(ActionSteps) 
    references = models.ForeignKey(References) 
    backburner = models.ForeignKey(BackburnerItems) 

答えて

1

あなたが特定のコンテナにエントリ割り当てるための選択肢を持つ単純なCharFieldを使用することができます。Projectインスタンスからか、のいずれかから、

class Entry(models.Model): 
    REFERENCE = 'reference' 
    BACKBURNER = 'backburner-item' 
    ACTION_STEP = 'action-step' 
    CONTAINER_CHOICES = (
     (REFERENCE, 'Reference'), 
     (BACKBURNER, 'Backburner item'), 
     (ACTION_STEP, 'Action step'), 
    ) 
    container = models.CharField(choices=CONTAINER_CHOICES) 
    project = models.ForeignKey('Project', on_delete=models.CASCADE) 
    ... 

あなたは簡単に特定のコンテナに属するエントリを照会することができますがEntryクラス:

references = project.entry_set.filter(container=Entry.REFERENCE) 
+0

です。プロジェクトの作成時にコンテナが確実に作成されるようにする方法はありますか?または、エントリをそこに移動しようとしている場合にのみ、プロジェクト用のコンテナを作成する必要がありますか? – MadPhysicist

+1

コンテナはもはや別個のモデルではなく、単純に 'Entry'モデルのcharフィールドであり、' Entry'は 'Project'に直接' ForeignKey'を持っています。別々にコンテナを作成する必要はありません。 – knbk

+0

ありがとうございました! – MadPhysicist