(Newbie) Stuck with annotate() docs

26 views
Skip to first unread message

Ankush Thakur

unread,
Apr 26, 2016, 12:50:31 PM4/26/16
to Django users
Folks, I'm having exceptional trouble understanding annotate(), aggregate(), and their various combinations. I'm currently stuck here: https://docs.djangoproject.com/en/1.9/topics/db/aggregation/#combining-multiple-aggregations

The example here uses Book.objects.first().chapters.count(), but there's no chapters model or field at the start of the tutorial. It's frustrating, to say the least. Even if I set up a separate application to test this myself, what do I make of "chapters"? Is it another model with many-to-many relation with Book? When I ran an example with the following models:

class Author(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()

class Book(models.Model):
    name = models.CharField(max_length=300)
    chapters = models.IntegerField()
    authors = models.ManyToManyField(Author)

I got: 

>>> Book.objects.first().chapters.count()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'int' object has no attribute 'count'
>>> 

So basically, I feel like I'm screwed. Please help.

Tim Graham

unread,
Apr 26, 2016, 7:06:40 PM4/26/16
to Django users
Looks like a typo. Does the rest of the example make sense and work if that line is changed to "Book.objects.first().chapters"?

Ankush Thakur

unread,
Apr 27, 2016, 10:45:03 AM4/27/16
to Django users
I'm not sure how Book.objects.first().chapters is different from Book.objects.first().chapters.count(), but the point is that "chapters" is not defined in the models at the top of that page! The snippet makes sense if I treat Book.chapters as another ManyToManyField (like authors), but it's really weird to see that error in the docs. So, does that mean I can report it? If yes, to who?

Tim Graham

unread,
Apr 27, 2016, 2:51:35 PM4/27/16
to Django users

Ankush Thakur

unread,
Apr 28, 2016, 12:51:05 PM4/28/16
to Django users
Yup! Makes sense now. I hope it saves someone some trouble someday. :-)

Thanks a lot, Tim!

Best,
Ankush
Reply all
Reply to author
Forward
0 new messages