С каталогом ( /catalog ) с фильтрацией и сортировкой вроде бы закончил, продолжаю идти по эндпойнтам моего проекта. Ну не то чтобы закончил, а сделаны "как-бы" рабочие версии части проекта.
Следующий - /products/popular и
При открытии данной конечной точки - серверу посылается запрос и возвращается ответ вида:
Когда уже начал реализовывать сериализатор, задался вопросом а как же выглядит код шаблона отвечающий за вывод баннеров? А вот так:
И получается что из всего объема информации что перечислена вверху, в словаре использоваться будет только "price", "title", "images". Ну да ладно...
Чтож давайте попробуем реализовать данную конечную точку.
Полистал я вкладки swagger'a и подумал - собственно все эти эндпойнты примерно одинаковые, у всех практически идентичная схема построения Response-ответа, сделаю ка я их все разом...
На главной странице выводятся следующие элементы: три избранные категории товаров (banners), каталог топ-товаров (popular product)(hot offers) и слайдер с ограниченным тиражом (Limited edition). 2 В каталог топ-товаров попадают восемь первых товаров по параметру «индекс сортировки». Если же индекс сортировки совпадает, то товары сортируются по количеству покупок.
Из технического задания
Мне нужно создать три класса (BannerListAPIView, PopularListAPIView, LimitedAPIView), все они будут основываться на ListAPIView. Будут практически одинаковыми с небольшими изменениями. Меняться лишь будет метод get_queryset, верней что он будет возвращать. По идее надо бы сделать один единственный класс в котором будет правиться этот get_queryset, но как это сделать - я пока не знаю и сделаю три класса, иначе разработка затянется.
Каждый класс будет выглядеть примерно так:
Сериализатор для баннера я сделаю дочерним от родительского CatalogListSerializer:
Просто немного добавлю изменений...
Собственно больше полей в сериализаторе не нужно, ибо в шаблоне и эти то не все используются, так что только то что нужно на данный момент, а когда потребуется (если), то добавлю или убавлю лишнее. Сейчас главное заставить полностью работать проект.
Представление получается примерно таким, но это еще не законченный вариант, буду перерабатывать, всё же надо сделать из трёх идентичных классов один!!!
Эти классы выводят практически одно и тоже, разве что только баннер выводит только то что нужно по условиям задачи. И получается вот такая красота: