當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。