2

Django GenericRelations でのフィルタリングは、https: //code.djangoproject.com/ticket/22207 を介して 4 年前に実装され、関連モデルからのフィルタリングをサポートするようになりました。

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])

just を使用するproject__offers_membersことはできません。Django は Generic Foreign Keys を逆に解決しないため、失敗します。

しかし、同じプロジェクト モデルをもう 1 つ作成するとどうなる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',
)

すべての異なるモデル (つまり、Gitlab プロジェクト、Jira プロジェクトなど) でGenericRelation同じ設定を試みました。ただし、その結果、Django は「最初の」プロジェクト モデルのみを選択します。後続のすべてのプロジェクト モデルとの一般的な関係は無視され、その結果、「最初の」プロジェクト モデルに属さないインスタンス セットを持つ課題は無視され、クエリセットの一部にはなりません。related_query_nameproject

複数の GenericRelations に同じrelated_query_name値が設定されている場合、Django はこれをサポートするか、(おそらく makemigrations コマンドの実行時に) 警告またはエラーを発行する必要があると思います。

属性が異なるモデルのインスタンスに設定されissuesているものを効率的にフィルタリングするにはどうすればよいでしょうか?project

4

0 に答える 0