当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django FilteredRelation用法及代码示例


本文介绍 django.db.models.FilteredRelation 的用法。

声明

class FilteredRelation(relation_name, *, condition=Q())

FilteredRelation annotate() 一起使用,以在执行 JOIN 时创建 ON 子句。它不作用于默认关系,而是作用于注解名称(下面示例中的pizzas_vegetarian)。

例如,要查找名称中带有 'mozzarella' 的素食比萨饼的餐厅:

>>> from django.db.models import FilteredRelation, Q
>>> Restaurant.objects.annotate(
...    pizzas_vegetarian=FilteredRelation(
...        'pizzas', condition=Q(pizzas__vegetarian=True),
...    ),
... ).filter(pizzas_vegetarian__name__icontains='mozzarella')

如果有大量比萨饼,则此查询集的性能优于:

>>> Restaurant.objects.filter(
...     pizzas__vegetarian=True,
...     pizzas__name__icontains='mozzarella',
... )

因为第一个查询集的WHERE 子句中的过滤只会对素食比萨饼起作用。

FilteredRelation 不支持:

在 Django 3.2 中更改:

添加了对嵌套关系的支持。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.db.models.FilteredRelation。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。