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_name
project
複数の GenericRelations に同じrelated_query_name
値が設定されている場合、Django はこれをサポートするか、(おそらく makemigrations コマンドの実行時に) 警告またはエラーを発行する必要があると思います。
属性が異なるモデルのインスタンスに設定されissues
ているものを効率的にフィルタリングするにはどうすればよいでしょうか?project