Python: Корзина покупок

Обновлено: 08 авг., 23:20
37
Студентов
70%
Завершения

django_project/app/models.py

Вам даны модели корзины для покупок ShoppingCart и товара ShopItem. Наличие товаров в корзине будет описывать модель ShoppingCartPosition. Кроме связи корзины и товара нужно знать количество товаров в корзине, эта информация тоже должна храниться в ShoppingCartPosition. Должно быть невозможно добавить один и тот же товар в корзину дважды — это должно быть ограничение (constraint) на уровне БД.

Задачи:

  • Описать необходимые поля модели ShoppingCartPosition.
  • Сгенерировать миграции.
  • Реализовать метод ShoppingCart.add(), который должен добавлять товар в корзину в указанном количестве:

    cart = models.ShoppingCart.objects.create()
    apple = models.ShopItem.objects.create(name='apple', price=2.0)
    pear = models.ShopItem.objects.create(name='pear', price=3.0)
    cart.add(apple, 2)
    cart.add(pear)  # по умолчанию добавляется одна штука
    
  • Реализовать свойство ShoppingCart.total_price, которое должно возвращать суммарную стоимость товаров в корзине с учётом их количества:

    cart.total_price == 2 * 2.0 + 1 * 3.0 # True
    
  • Реализовать метод ShoppingCart.preview(), который должен возвращать итератор пар, каждая из которых состоит из наименования товара (строка) и количества товаров этого вида в корзине. Элементы итератора должны быть отсортированы по порядку убывания итоговой цены позиции в корзине: сотня салфеток ценой в 10коп каждая — 10руб в сумме — должна идти раньше пары яблок по 2руб за каждое или 4руб в сумме.

    for name, quantity in cart.preview():
        print(quantity, '×', name)
    
    # => 2 × apple
    # => 1 × pear
    # пара яблок дороже одной груши!
    

Подсказка

  • Для ShoppingCart.preview() вам пригодятся аннотирование и F-выражения.
  • Для ShoppingCart.total_price вам пригодятся те же F-выражения и агрегация.
  • Чтобы обеспечить уникальность товаров в корзине, укажите для ShoppingCartPosition ограничение unique_together.

Для полного доступа к испытанию нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов