如何在 DJango 中使用不同模型的外键
How to use foreignkey with different models in DJango
我正在处理这个问题,并在在这里问这个问题之前寻找一些解决方案。假设我有一个 Model
在不同的 Models
中共享相同的字段 我怎样才能实现这一点,当我得到那些 Models
的 objects
我可以包括那个 Model
foreign key
,我确实尝试在 DJango
中使用 Generic Relation
来实现这一点,但它并没有解决我的问题。
这是我尝试使用 Generic Relation
:
实现的示例
Model1(models.Model):
.. objects_on_this_model ..
Model2(models.Model):
.. objects_on_this_model ...
# Now this is where the model I could save different models with same field shared
SameObjectModel(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntengerField()
content_object = GenericForeignKey('content_type', 'object_id')
.. objects_on_this_model .. # which is the field that has same field to use in different models
所以当我尝试从 Model(n)
获取 objects
时,我怎样才能实现或获取 SameObjectModel
?
我想我可以做到这一点:
Model(n).objects.prefetch_related('fk').all()
似乎这不是一个好主意,因为我不知道我应该把 related_name
放在哪里,因为外键是 content_type
这是模型并且有 object_id
代表字段primary_key
.
在您的 Model(n)
上,您可以将 GenericRelation
添加到 SameObjectModel
:
from django.contrib.contenttypes.fields import GenericRelation
class Model1(models.Model):
sameobject = GenericRelation(SameObjectModel)
有了这个,应该可以使用 prefetch_related
:
Model1.objects.prefetch_related('sameobject').all()
我正在处理这个问题,并在在这里问这个问题之前寻找一些解决方案。假设我有一个 Model
在不同的 Models
中共享相同的字段 我怎样才能实现这一点,当我得到那些 Models
的 objects
我可以包括那个 Model
foreign key
,我确实尝试在 DJango
中使用 Generic Relation
来实现这一点,但它并没有解决我的问题。
这是我尝试使用 Generic Relation
:
Model1(models.Model):
.. objects_on_this_model ..
Model2(models.Model):
.. objects_on_this_model ...
# Now this is where the model I could save different models with same field shared
SameObjectModel(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntengerField()
content_object = GenericForeignKey('content_type', 'object_id')
.. objects_on_this_model .. # which is the field that has same field to use in different models
所以当我尝试从 Model(n)
获取 objects
时,我怎样才能实现或获取 SameObjectModel
?
我想我可以做到这一点:
Model(n).objects.prefetch_related('fk').all()
似乎这不是一个好主意,因为我不知道我应该把 related_name
放在哪里,因为外键是 content_type
这是模型并且有 object_id
代表字段primary_key
.
在您的 Model(n)
上,您可以将 GenericRelation
添加到 SameObjectModel
:
from django.contrib.contenttypes.fields import GenericRelation
class Model1(models.Model):
sameobject = GenericRelation(SameObjectModel)
有了这个,应该可以使用 prefetch_related
:
Model1.objects.prefetch_related('sameobject').all()