如何在 DJango 中使用不同模型的外键

How to use foreignkey with different models in DJango

我正在处理这个问题,并在在这里问这个问题之前寻找一些解决方案。假设我有一个 Model 在不同的 Models 中共享相同的字段 我怎样才能实现这一点,当我得到那些 Modelsobjects 我可以包括那个 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()