我想讨论一下使用 GenericRelation 和 GenericForeignKey 的情况。
我有 2 个模型,Appartement 和 Mission。我需要创建将连接到 Appartment 或 Mission 的 LockCode 模型。我已将 GenericForeignKey 添加到 LockCode 和 GenericRelation 到 Appartement 和 Mission:
class LockCode(TimeStampedModel):
context_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
context_id = models.PositiveIntegerField()
context = GenericForeignKey('context_type', 'context_id')
class Mission(DirtyFieldsMixin, models.Model):
lock_codes = GenericRelation(
LockCode,
content_type_field='context_type',
object_id_field='context_id',
related_query_name='mission'
)
class Appartment(DirtyFieldsMixin, models.Model):
lock_codes = GenericRelation(
LockCode,
content_type_field='context_type',
object_id_field='context_id',
related_query_name='appartment'
)
它工作正常。但是增加了复杂性级别来比较添加 2 个外键,用于公寓和任务。
class LockCode(TimeStampedModel):
appartement = models.ForeignKey(Appartement, null=True, blank=True)
mission = models.ForeignKey(Mission, null=True, blank=True)
那么我应该保留GFK还是使用2个简单的FK?