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 атрибут установлен для экземпляров разных моделей?

0 ответов

Другие вопросы по тегам