与Queryset.annotate()混淆

时间:2017-06-20 21:05:39

标签: django django-orm

我有两种模式:

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

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

我想要的是使用相关的AccommodationType的数量来注释Property的查询集,并使用此计数的值对其进行过滤。所以这是我的代码:

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

在这里我得到了错误:

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

我哪里错了?

1 个答案:

答案 0 :(得分:1)

[XmlText]annotate一样,不会改变查询集,但会返回一个新查询集。您需要将其重新分配给filter

qs

或者将其与原始查询结合使用:

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