简体   繁体   中英

Django Want to count different item types

Previously I had a client summary list in a table. In one column I had a list of object types and in another, I had the quantity of that object type.

@login_required
def client_summary(request, client_id):
    client = models.Client.objects.get(pk = client_id)
    items = client.storageitem_set.all()
    tape_and_film_items = client.storageitem_set.filter(type="1")
    total_tape_and_film_items = tape_and_film_items.count()
    electrical_equipment_items = client.storageitem_set.filter(type="2")
    total_electrical_equipment_items = electrical_equipment_items.count()
    storage_office_equipment_items = client.storageitem_set.filter(type="3")
    total_storage_office_equipment_items = storage_office_equipment_items.count()


<table cellspacing="15" style="float: left">
<tr><th scope="col">Type</th><th scope="col">Quantity</th></tr>
</tr><td>Tape + Film</td><td align="center">{{total_tape_and_film_items}}</td></tr>
</tr><td>Electrical Equipment</td><td align="center">{{total_electrical_equipment_items}}</td></tr>
</tr><td>Storage Office Equipment</td><td align="center">{{total_storage_office_equipment_items}}</td></tr>
</table>

Now this would work, but there is a problem. I did not knew earlier that users could add their own storage object from a form in my web app. If they try add a new object type, it will not show up in my client summary unless I explicitly write up an django query in a view passing a variable in a template. If there was no form to add an object type, this would have worked.

So in my template now I have this now in the type column. This part will work because all I really need to do is list all the storage item objects regardless of whoever client it is.

views.py

item_type = models.StorageObject.objects.all()

template

 {% for item in item_type %}
     {{item.title}}
 {% endfor %}

But in the quantity column I can't seem to count. Returns nothing.

{% for item in items %}
    {{item.type.count}}
{% endfor %}

If you need to display some info of items for every tag, you can use regroup tag. If you want only quantity, use Count aggregation function.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM