Django ORM - фильтр по GenericRelation по нескольким моделям
Фильтрация в Django GenericRelations была реализована 4 года назад через https://code.djangoproject.com/ticket/22207 и теперь поддерживает фильтрацию из связанной модели:
class Issue(models.Model):
project_content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, blank=False, null=True)
project_id = models.PositiveIntegerField(blank=False, null=True)
project = GenericForeignKey('project_content_type', 'project_id')
class GitlabProject(models.Model):
issues = GenericRelation(
Issue,
related_query_name='generic_project',
content_type_field='project_content_type',
object_id_field='project_id',
)
а потом:
issues = queryset.filter(generic_project__offers__members__in=[request.user])
Мы не можем использовать только project__offers_members
- это потерпит неудачу, так как Django не разрешает обратное решение Generic Foreign Keys
Однако что произойдет, если у нас есть другая модель проекта с тем же related_query_name
?
class JiraProject(models.Model):
issues = GenericRelation(
Issue,
related_query_name='generic_project',
content_type_field='project_content_type',
object_id_field='project_id',
)
Я пытался установить GenericRelation
с тем же related_query_name
на все разные project
модели (например, проект Gitlab, проект Jira и т. д.). Однако это приводит к тому, что Django выбирает только "первую" модель проекта. Родовое отношение ко всем последующим моделям проекта игнорируется, и в результате проблемы с установленными экземплярами, которые не относятся к "первой" модели проекта, игнорируются и не являются частью набора запросов.
Я думаю, что Django должен либо поддерживать это, либо выдавать предупреждение или ошибку (возможно, при выполнении команды makemigrations), когда несколько GenericRelations имеют одинаковые related_query_name
значение установлено.
Как можно эффективно фильтровать через issues
которые имеют свои project
атрибут установлен для экземпляров разных моделей?