Я хотел бы обсудить случай использования GenericRelation и GenericForeignKey.
У меня есть 2 модели: Appartement и Mission.И мне нужно создать модель LockCode, которая будет связана с Appartment или Mission.Я добавил 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 ForeignKeys, для апартаментов и для миссии.
class LockCode(TimeStampedModel):
appartement = models.ForeignKey(Appartement, null=True, blank=True)
mission = models.ForeignKey(Mission, null=True, blank=True)
Так я должен оставить GFK или использовать 2 простых FK?