Как я могу получить все объекты модели и ее поля?
У меня есть модель продукта, и я хочу иметь возможность подсчитать все его объекты в методе, чтобы я мог вывести общее количество в шаблоне, то же самое для каждой категории, но я могу сделать это только с помощью метода number_of_likes.
class Category(models.Model):
name = models.CharField(max_length=45)
...
class Product(models.Model):
author = models.ForeignKey(User, default=None, on_delete=models.CASCADE)
title = models.CharField(max_length=120, unique=True)
category = models.ForeignKey(Category, default=None, on_delete=models.PROTECT)
product_type = models.CharField(max_length=30, choices=TYPE, default='Physical')
likes = models.ManyToManyField(User, related_name='like')
...
def number_of_likes(self):
return self.likes.count()
def number_of_products(self):
return self.Products.objects.all.count()
def number_of_products_for_category(self):
return Product.objects.filter(category_id=self.category_id).count()
def __str__(self):
return str(self.title) + ' from ' + str(self.author)
<div>
<h3>All products ({{ number_of_products }})</h3>
{% for category in categories %}
<p>{{ category.name }} (q)</p>
{{ number_of_products_for_category }}
{% endfor %}
</div>
Не работают методы number_of_products и number_of_products_for_category.
Вы можете работать с:
def number_of_products_for_category(self):
return Product.objects.filter(category_id=self.category_id).count()
Но если вы используете это для всех категорий, вы можете .annotate(..)
[Django-doc] queryset:
from django.db.models import Count
categories = Category.objects.annotate(num_products=Count('product'))
и визуализировать с помощью:
{% for category in categories %} <p>{{ category.name }} ({{ category.num_products }})</p> {% endfor %}
Note: It is normally better to make use of the
settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use theUser
model [Django-doc] directly. For more information you can see the referencing theUser
model section of the documentation.