2017-08-04 1 views
2

J'essaie de faire une jointure interne sur ces 3 tables en utilisant PersonScore mais il ne peut pas trouver persontype. Qu'est-ce que je fais mal?paramètre invalide à prefetch_related()

modèles:

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) 
Code

:

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

erreur:

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

:

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

erreur:

KeyError: (1L,) 
+0

Y at-il encore un problème? ou résolu? –

Répondre

2

Dans le PersonScore vous devriez d'utiliser select_related au lieu de prefetch_related

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

si vous voulez utiliser prefetch_related, vous utiliserez avec personne

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

vous pouvez vérifier plus de détails ici: What's the difference between select_related and prefetch_related in Django ORM?

Je ho pe qui sera utile pour vous.