django - Django ORM(Django 2.X)中“FilteredRelation()”对象的用途是什么?
问题描述
我见过 Django 2.0 包括FilteredRelation
对象组成。新引进的有什么用FilteredRelation
?
我调查了什么?
我观察了Django 2.0 文档,但我无法理解这背后的想法FilteredRelation
对象背后的想法。
我查看了以下代码。但我没明白。
>>> 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')
主要问题
现在显示我的问题是
FilteredRelation
你的QuerySet
?
解决方案
我认为文档本身是不言自明的。
您可以在Method-1中获得相同的结果
from django.db.models import FilteredRelation, Q
result_1 = Restaurant.objects.annotate(pizzas_vegetarian=FilteredRelation('pizzas', condition=Q(pizzas__vegetarian=True), ), ).filter(
pizzas_vegetarian__name__icontains='mozzarella')
方法二
result_2 = Restaurant.objects.filter(pizzas__vegetarian=True, pizzas__name__icontains='mozzarella')
您将使用Method-1
获得更好的性能,因为第一个查询集的WHERE子句中的过滤只会对素食比萨饼起作用。
更新
Django #29555票证包含有关使用和性能的更多信息。不仅可以提高性能,而且在与多个 s 聚合时会产生正确
的结果。FilteredRelation()
LEFT JOIN
推荐阅读
- python - 哪个 SKLearn 接口定义了 .fit、.predict 等
- c# - Selenium 无法在日期时间文本框中发送密钥
- visual-studio - Visual Studio 2019 内存分析器工具将托管堆中的所有对象列为 UNKNOWN
- c# - 在创建之前强制搜索
- testing - 对于新的测试用例,如何阻止 Tester 字段自动默认为创建卡片的人的名字?
- c - 用于表示图形的高效数据结构
- java - Travis CI 构建因 JUnit 5 失败
- python - Django 渲染() - 未找到“”的反向。'' 不是有效的视图函数或模式名称
- python - 用 sudo 安装 python 包有什么不明智的?
- azure - 如何使用 Azure REST Api 更新 Web 应用连接字符串