当前位置: 首页 > 知识库问答 >
问题:

预取_相关()的参数无效

刘嘉木
2023-03-14

我试图做一个内连接在这3个表使用人格证,但它找不到人格证。我做错了什么?

模型:

class PersonScore(models.Model):
    id = models.IntegerField(primary_key=True)  # AutoField?
    person = models.ForeignKey(‘Person’)

class Person(models.Model):
    id = models.IntegerField(primary_key=True)  # AutoField?
    name = models.CharField(max_length=255)

class PersonType(models.Model):
    person = models.ForeignKey(‘Person’)
    type = models.CharField(max_length=255)

代码:

PersonScore.objects.filter(person__name="Bob").prefetch_related("person__persontype")

错误:

Cannot find 'persontype' on Person object, 'person__persontype' is an invalid parameter to prefetch_related()

代码:

PersonScore.objects.filter(person__name="Bob").prefetch_related("person__persontype_set")

错误:

KeyError: (1L,)

共有1个答案

房项禹
2023-03-14

在PersonScore中,您应该使用select_related而不是prefetch_related

    PersonScore.objects.filter(person__name="Bob").select_related("person__persontype")

如果你想使用prefetch_related,你可以和Person一起使用

    Person.objects.filter(personscore_set__name="Bob").prefetch_related("personscore_set"

您可以在这里查看更多详细信息:在Django ORM中,select_相关和prefetch_相关之间有什么区别?

我希望这会对你有所帮助。

 类似资料:
  • 我很难理解Django ORM中的和。我有以下型号: 现在我的views.py: 但是现在,每次for循环迭代时,它都会访问数据库3次。我试图提高时间复杂度——现在是3N 2,N是城市的数量,但是我不能理解select_related和prefetch_related。 你能给我一个例子,我该如何改进它,使它不会在for循环中命中数据库3次吗?

  • 本文向大家介绍java中如何获取相关参数,包括了java中如何获取相关参数的使用技巧和注意事项,需要的朋友参考一下 此文通过一段代码来展示java获取相关参数的方法分享给大家: 希望大家能够喜欢。

  • 我有一个与相关预测因子相关的练习,它指出以下几点: 答:贝兹·R1,D … D:贝兹·R1,F … F:不是R1的R1 预测工作如下 > 获取当前指令 如果是分支,则确定预测器的当前状态并预测分支: a.row 由分支地址确定(在本例中为 A 或 D) b. 列由当前全局移位寄存器确定 c.使用单元格中的值确定来自状态机的预测(当前状态保存在单元格中) 执行分支,并确定实际决策(已采取:1,未采取

  • 这是关于cppreference的描述。com说 模板中使用的依赖名称的查找将推迟到模板参数已知时,此时[…]ADL检查从模板定义上下文或模板实例化上下文可见的具有外部链接的函数声明。 与此相反,以下代码段可以使用三个编译器(MSVC、clang、gcc)很好地编译: Foo是CallFoo中的从属名称:它取决于模板参数T。但是,尽管违反了上述两条规则,编译器还是找到了函数Foo。 从的定义或实例

  • 以下程序在C 20中编译良好: 但在C 17中,它会产生一个错误: 你能告诉我C20有什么变化让它工作吗?

  • 我有一个表示数据元类型的接口类型。该参数指示将用于表示数据的Java类型: 我还有一个表示该类型实例的值接口: 所以想象一下,它是一个简单的类型来表示系统中的数字(还有更复杂的动态类型,除了在运行时不存在,这是元编程的乐趣所在): 它告诉调用方在系统中用来表示此类型的Java类型。如果声明的值: 我希望能够具有编译时安全性,使始终返回一个BigDecimal: 这样,如果我需要更改给定类型的Jav