2016-08-06 13 views
0

私は2つのモデルのフィールドがForeignKeyに接続されたGenericForeignKeyを持つ方法がありますか?複数のモデルのDjango GenericForeignKeyフィールド

+0

あなたは二つのモデルにFKを持つようにしたい、ということを意味しますか? – DurgaDatta

+0

私は1つのメインオブジェクトとすべてのを指す子オブジェクトの束を持っているのは同じではありません他の同じ型のモデル。一貫性を持ち、データの複製を作成しないために、すべての子モデルが指摘しなければならないメインモデルにcontent_typeを1回だけ格納したいと思います。 –

答えて

0

私は自分のライブラリを書く必要がありました。 https://github.com/BrnoPCmaniak/django-egfk だから今、私はこれを行うことができます。

class Main(models.Model): 
    content_type = models.ForeignKey(
     ContentType, on_delete=models.CASCADE, blank=True, null=True) 


class Child(models.Model): 
    object_id = models.PositiveIntegerField() 
    main = models.ForeignKey(Main, related_name="child") 
    content_object = EnhancedGenericForeignKey('main.content_type', 'object_id') 

使用例:

>>> from test_egfk.models import Main, Child, TestSampleModel 
>>> m = Main() 
>>> print(m.content_type) 
None 
>>> m.save() 
>>> t = TestSampleModel(text="Test") 
>>> t.save() 
>>> t.text 
'Test' 
>>> c = Child(main=m, content_object=t) 
>>> c.save() 
>>> Main.objects.last().content_type 
<ContentType: test sample model> 
>>> c.content_object 
<TestSampleModel: TestSampleModel object> 
関連する問題