2017-08-04 64 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?

我好這將有助於你。