Модель с количеством в Django ORM

Решил в свободное время сделать API на DRF. В целях обучения. APi будет схож с онлайн - меню. При создании моделей, появился вопрос как правильно высчитывать общее кол-во одинаковых продуктов. Тоест один клиент допустим может купить 5 бургеров, и при добавлении их в корзину я хочу реализовать чтобы было наименование продукта + кол-во + общая цена. Если знаете подходящую литературу, тоже хороший вариант. ( не общую по БД, а по агрегирующим в django ORM ) Для большего понимания текущие модели выглядят так:

from django.db import models
from django.contrib.auth import get_user_model


User = get_user_model


class Category(models.Model):
    name = models.CharField('Название категории', max_length=200, unique=True)
    slug = models.SlugField()
    description = models.TextField('Описание категории')

    class Meta:
        ordering = ['name']

    def __str__(self):
        return self.name


class Product(models.Model):
    name = models.CharField('Название продукта', max_length=100, unique=True)
    description = models.TextField('Описание продукта', blank=True, null=True)
    category = models.ForeignKey(
        Category,
        on_delete=models.SET_NULL,
        related_name='category'
    )
    price = models.DecimalField(decimal_places=2)

    class Meta:
        ordering = ['name']

    def __str__(self):
        return self.name


class Basket(models.Model):
    user = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='allbasket'
    )
    products = models.ForeignKey(
        Product, on_delete=models.CASCADE, related_name='alluser'
    )
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f'{self.user} {self.products}'

Заранее благодарен!


Ответы (1 шт):

Автор решения: h4cktivist

Вы можете создать property метод в моедли Basket для подсчета колличества товаров в корзине:

class Basket(models.Model):
...
    
    @property
    def get_quantity():
        return self.products.all().count()

Можете вызывать этот метод так:

basket = Basket.objects.all()

for item in basket:
    item.get_quantity()
→ Ссылка