【问题标题】:invalid parameter to prefetch_related()prefetch_related() 的参数无效
【发布时间】:2018-01-12 18:37:13
【问题描述】:

我正在尝试使用 PersonScore 对这 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,)

【问题讨论】:

  • 还有问题吗?还是解决了?

标签: django django-models django-orm


【解决方案1】:

在 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"

您可以在此处查看更多详细信息:What's the difference between select_related and prefetch_related in Django ORM?

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 2018-11-05
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多