2016-10-03 6 views
3

私は2つのモデルを持っていました。親子。子供と親はいくつかのフィールドを持っているので、私は単一のモデルの人を持つ代わりに、それらを分けなければなりませんでした。 子供は父親と母親がいなければならないので、私は2人の別々の父親と母親を別々のモデルで持っていました。 は、これまでのところ:django foreignKeyは複数のテーブルを参照しています

class Father(models.Model): 
    name = models.CharField(max_length=50) 
    ... 
class Mother(models.Model): 
    name = models.CharField(max_length=50) 
    ... 
class Child(models.Model): 
    name = models.CharField(max_length=50) 
    ... 
    father=models.ForeignKey(Father) 
    mother... 

それは、より良い設計する必要がありますが、私はプロではありませんよ。

今、健康のために別のモデルが必要です。子供や父親や母親に属しているモデルを持つことは可能ですか?あるいは、私は、子供の健康、父の健康などのそれぞれについて1つの健康モデルを作成する必要がありますか? thnxを事前に

+1

、(https://docs.djangoproject.com/en/1.10/ref/contrib/contenttypes/#generic-relations)[一般的な関係をジャンゴ]を見て、それはあなたのために – devxplorer

答えて

1

私はあなたがこの状況でGenericForeignKeyを使用することができると信じています。どのようなもので、どのように使用するかは、ドキュメントから見つけることができます。 https://docs.djangoproject.com/ja/1.10/ref/contrib/contenttypes/#module-django.contrib.contenttypes

+0

を助けることができるかもしれ誰がダウン投票するのですか?問題は「フィールドが子供や父親や母親に属するモデルを持つことは可能ですか?あるいは、私は、子供の健康、父親のような健康モデルを作るべきですか? –

1

などの抽象モデルを作成できます。 HumanAbstract

class HumanAbstract(models.Model): 
    class Meta: 
     abstract = True 

    name = models.CharField(max_length=50) 
    rest_common_fields = ... 

そしてあなたFatherMotherChildHumanAbstractから継承することができます。 MetaHumanAbstractにはabstract = Trueが含まれているため、データベースには作成されません。

Docs抽象クラスについて

また、FatherMotherモデルを削除し、Parentモデルのみを作成することもできます。

class Parent(HumanAbstract): 
    pass 

class Child(HumanAbstract): 
    father = models.ForeignKey(Parent) 
    mother = models.ForeignKey(Parent) 
    ... 

UPDATE

@SergeyZherevchukがGenericForeignKeyに関する権利である、あなたは単にそれを統合することができ、それが最良の選択でしょう。

class HealthModel(models.Model): 
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type', 'object_id') 
    ... 
関連する問題