2017-08-04 56 views
2

我试图做这些3个表使用PersonScore的内部联接,但它无法找到persontype。我究竟做错了什么?对prefetch_related无效参数()

型号:

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,) 
+0

还有问题吗?或解决? –

回答

2

在PersonScore你应该要使用select_related而不是prefetch_related

PersonScore.objects.filter(person__name="Bob").select_related("person__persontype") 
如果你想使用prefetch_related

,你将与人

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

可以点击这里查看更多详情:What's the difference between select_related and prefetch_related in Django ORM?

我好这将有助于你。