zerohedge
zerohedge

Reputation: 3765

django: filtering with multiple criteria without losing other fields?

My model looks like so: Each Bottle has an attribute name, and a relationship to Brand.

In one of my views, I want to show a user all distinct bottles, and their counts.

A distinct bottle is a bottle that has the same name attribute, and the same Brand relationship.

So this table:enter image description here

Should display 2 lines instead of 3, with the proper quantities (1 for Eitan, 2 for Almon).

The following line in my views.py:

object = Bottle.objects.filter(brand__business__owner_id=user.id).all().values('name').annotate(Count('brand'))

Produces this when I print object:

<QuerySet [{'name': 'Almon', 'brand__count': 2}, {'name': 'Eitan', 'brand__count': 1}]>

Which seems to be the right direction, but it has two problems:

  1. I lose all other fields (vintage, capacity) except name and brand__count. I can of course explicitly add them to values, but that seems a) upythonic b) that it will group_by these items as well!

  2. My pug template complains: Need 2 values to unpack in for loop; got 1 (this is because I'm iterating through them as a list, and using its index for numbering)

Any help is appreciated!

Upvotes: 0

Views: 253

Answers (1)

Exprator
Exprator

Reputation: 27523

object = Bottle.objects.filter(brand__business__owner_id=user.id).all().values('name','vintage','capacity').annotate(Count('brand'))

unless you mention the fields to filter as you are mentioning name then how will the query set pass it to you? then do this, like not mentioning any name in the values

object = Bottle.objects.filter(brand__business__owner_id=user.id).all().values().annotate(Count('brand'))

both of this will give you all the fields in Bottle table

Upvotes: 1

Related Questions