Техническая задача: реализовать CRUD-логику для продуктов и складов, используя Django Rest Framework.
CRUD – аббревиатура для Create-Read-Update-Delete. Ей обозначают логику для операций создания-чтения-обновления-удаления сущностей. Подробнее: https://ru.wikipedia.org/wiki/CRUD
У нас есть продукты, которыми торгует компания. Продукты описываются названием и необязательным описанием (см. models.py
). Также компания имеет ряд складов, на которых эти продукты хранятся. У продукта на складе есть стоимость хранения, поэтому один и тот же продукт может иметь разные стоимости на разных складах.
Необходимо реализовать REST API для создания/получения/обновления/удаления продуктов и складов. Так как склады имеют информацию о своих продуктах (через связанную таблицу) - необходимо переопределить методы создания и обновления объектов в сериализаторе (см. serializers.py
).
Помимо CRUD-операций необходимо реализовать поиск продуктов по названиям и описанию. И поиск складов, в которых есть определенный продукт (по идентификатору). Подробности в файле requests-examples.http
.
Так как продуктов и складов может быть много, то необходимо реализовать пагинацию для вывода списков.
Рекомендуется обратить внимание на реализацию файлов urls.py
(менять их не надо, просто обратить внимание и осознать).
-
Вам необходимо будет задать логику во views и serializers. В места, где нужно добавлять код, включены комментарии. После того как вы добавите код, комментарии можно удалить.
-
Для обновления объектов удобно использовать метод
update_or_create
: https://docs.djangoproject.com/en/3.2/ref/models/querysets/#update-or-create
Реализуйте поиск складов, в которых есть определенный продукт, но при этом указывать хочется не идентификатор продукта, а название (или его часть) или часть описания.
Пример запроса:
# поиск складов, где есть определенный продукт
GET {{baseUrl}}/stocks/?search=помид
Content-Type: application/json
Для запуска проекта необходимо:
Установить зависимости:
pip install -r requirements.txt
Вам необходимо будет создать базу в postgres и прогнать миграции:
manage.py migrate
Выполнить команду:
python manage.py runserver