2017-06-20 1 views
0

J'ai deux modèles:Confusion avec Queryset.annotate()

class Property(models.Model): 
    # code here... 

class AccommodationType(models.Model): 
    property = models.ForeignKey(Property, related_name='accommodation_types') 
    # rest of code here... 

Ce que je suis en train de est à annoter le queryset de la propriété avec le nombre de AccommodationType connexes et de filtrer par la valeur de ce nombre. Donc, voici mon code:

qs = Property.objects.all() 
qs.annotate(acc_types_count=Count('accommodation_types')) 
filtered = qs.filter(acc_types_count=1) 

et ici je me suis l'erreur:

django.core.exceptions.FieldError: Cannot resolve keyword 'acc_types_count' into field. Choices are: # ...rest of the fields 

Là où je me trompe?

Répondre

1

annotate, comme filter, ne mute pas le jeu de requête mais en retourne un nouveau. Vous devez réassigner que pour qs:

qs.annotate(acc_types_count=Count('accommodation_types')) 

Ou combiner avec la requête originale:

qs = Property.objects.all().annotate(acc_types_count=Count('accommodation_types')) 
+0

Merci, on dirait que mon cerveau est lentement fusion :) – Compadre