python - 可空字段上的 select_related 在视图中无法按预期工作
问题描述
我select_nullable
在 Django 视图中使用来检索可以为空的关系
必须指定可为空的外键
所以我明确地将它作为参数传递:
source_text = get_object_or_404(Text.objects.select_related('language'), pk=source_text_pk)
问题是,当我在模板中访问它时,它会生成一个数据库查询,即:
# items/templates/items/source.html
{{source.language.code}}
测试它:
# items/tests/test_views.py
...
source_text = TextFactory()
context = {'source': source_text}
with self.assertNumQueries(0):
# render the template with given context to trigger possible db hits
from django.template.loader import render_to_string
rendered = render_to_string("items/source.html", context)
生成:
...
AssertionError: 1 != 0 : 1 queries executed, 0 expected
Captured queries were:
1. SELECT "languages_language"."id", "languages_language"."name", "languages_language"."code" FROM "languages_language" WHERE "languages_language"."id" = 16
涉及的模型定义为:
# items/models.py
class Text(models.Model):
language = models.ForeignKey('languages.Language',
on_delete=models.SET_NULL,
blank=True,
null=True)
# languages/models.py
class Language(models.Model):
name = models.CharField(max_length=200)
code = models.CharField(max_length=35)
def __str__(self):
return "name: {} \tcode: {}".format(self.name, self.code)
我应该如何使用select_related
不在视图中生成数据库查询?
解决方案
推荐阅读
- performance - RC 在跟踪 GC 上的确切开销是多少?
- c# - 解析表没有得到所有 td 元素
- java - 在运行时手动打开 liquibase
- wordpress - 谁能告诉我如何按 asc 顺序在商店页面上按类别显示产品
- node.js - 在数组nodejs mongoose JOI上存储一个包含2个值的数组
- java - 解决子模块以外的依赖关系
- macos - macOS 上奇怪的并行部分 OpenMP 行为
- gradle - gradle:如何在同一个地方配置所有子项目插件?
- github - 做 git add (and) commit 的最佳实践是什么
- reactjs - 在 react-typescript 项目中创建后端 typescript 模块