📝 Практикум 7: задачи

13 задач: Category (1) · Supplier (2) · Product (3.1–3.2) · ProductDetail (4.1–4.2) · Address (5) · Customer (6.1–6.3) · Order (7.1–7.2) · OrderItem (8.1–8.3)

⚡ Все задачи — кратко

Контекст: создаём сериализаторы для 8 моделей интернет-магазина в store/serializers.py.

  1. 1: CategorySerializerModelSerializer, fields='__all__'
  2. 2: SupplierSerializerModelSerializer, fields='__all__'
  3. 3.1: ProductSerializer — read + nested Category, Supplier
  4. 3.2: ProductCreateUpdateSerializer — write, FK-ключи
  5. 4.1: ProductDetailSerializer — read + nested Product
  6. 4.2: ProductDetailCreateUpdateSerializer — write, FK product
  7. 5: AddressSerializer — CRUD
  8. 6.1: CustomerSerializer — read + nested Address + read_only_fields
  9. 6.2: CustomerCreateUpdateSerializer — write, явные поля
  10. 6.3: Валидация phone_number — regex ^\d{10,15}$
  11. 7.1: OrderSerializer — read + nested Customer + read_only_fields
  12. 7.2: OrderCreateUpdateSerializer — write + read_only_fields
  13. 8.1: OrderItemSerializer — read + nested Product, Order
  14. 8.2: OrderItemCreateUpdateSerializer — write, FK-ключи
  15. 8.3: Валидация quantity — не больше 1000
Задача практикума: Для каждой модели из предыдущих заданий создайте соответствующие сериализаторы. Некоторые модели будут иметь несколько сериализаторов для разных целей (например, только для чтения или только для записи).

Задача 1 — Сериализатор для модели Category

Задание 1

Создайте сериализатор для модели Category:

  • Позволяет получать, создавать и обновлять записи категории.

Файл: store/serializers.py

→ Посмотреть решение

Задача 2 — Сериализатор для модели Supplier

Задание 2

Создайте сериализатор для модели Supplier:

  • Позволяет получать, создавать и обновлять записи поставщика.

→ Посмотреть решение

Задача 3 — Сериализаторы для модели Product

Задание 3.1 — Сериализатор для получения данных

Создайте сериализатор для модели Product:

  • Позволяет получать данные продукта.
  • Включает связанные объекты Category и Supplier в виде вложенных сериализаторов.

→ Посмотреть решение

Задание 3.2 — Сериализатор для создания и обновления данных

Создайте сериализатор для модели Product:

  • Позволяет создавать и обновлять записи продукта.
  • Использует первичные ключи для полей category и supplier.

→ Посмотреть решение

Задача 4 — Сериализаторы для модели ProductDetail

Задание 4.1 — Сериализатор для получения данных

Создайте сериализатор для модели ProductDetail:

  • Позволяет получать данные деталей продукта.
  • Включает связанные объекты Product в виде вложенного сериализатора.

→ Посмотреть решение

Задание 4.2 — Сериализатор для создания и обновления данных

Создайте сериализатор для модели ProductDetail:

  • Позволяет создавать и обновлять записи деталей продукта.
  • Использует первичный ключ для поля product.

→ Посмотреть решение

Задача 5 — Сериализатор для модели Address

Задание 5

Создайте сериализатор для модели Address:

  • Позволяет получать, создавать и обновлять записи адреса.

→ Посмотреть решение

Задача 6 — Сериализаторы для модели Customer

Задание 6.1 — Сериализатор для получения данных

Создайте сериализатор для модели Customer:

  • Позволяет получать данные клиента.
  • Включает связанные объекты Address в виде вложенного сериализатора.
  • Поля date_joined, deleted и deleted_at не должны быть доступны для создания и изменения.

→ Посмотреть решение

Задание 6.2 — Сериализатор для создания и обновления данных

Создайте сериализатор для модели Customer:

  • Позволяет создавать и обновлять записи клиента.
  • Использует первичный ключ для поля address.
  • Поля date_joined, deleted и deleted_at не должны быть доступны для создания и изменения.

→ Посмотреть решение

Задание 6.3 — Валидация номера телефона

Создайте метод валидации для поля phone_number, который:

  • убедится, что номер телефона состоит из 10–15 цифр и не содержит букв или специальных символов.

→ Посмотреть решение

Задача 7 — Сериализаторы для модели Order

Задание 7.1 — Сериализатор для получения данных

Создайте сериализатор для модели Order:

  • Позволяет получать данные заказа.
  • Включает связанные объекты Customer в виде вложенного сериализатора.
  • Поле order_date не должно быть доступным для создания и изменения.

→ Посмотреть решение

Задание 7.2 — Сериализатор для создания и обновления данных

Создайте сериализатор для модели Order:

  • Позволяет создавать и обновлять записи заказа.
  • Использует первичный ключ для поля customer.
  • Поле order_date не должно быть доступным для создания и изменения.

→ Посмотреть решение

Задача 8 — Сериализаторы для модели OrderItem

Задание 8.1 — Сериализатор для получения данных

Создайте сериализатор для модели OrderItem:

  • Позволяет получать данные элемента заказа.
  • Включает связанные объекты Product и Order в виде вложенных сериализаторов.

→ Посмотреть решение

Задание 8.2 — Сериализатор для создания и обновления данных

Создайте сериализатор для модели OrderItem:

  • Позволяет создавать и обновлять записи элемента заказа.
  • Использует первичные ключи для полей order и product.

→ Посмотреть решение

Задание 8.3 — Валидация количества товара

Создайте метод валидации для поля quantity, который:

  • убедится, что количество товара не больше тысячи.

→ Посмотреть решение

← К оглавлению урока    Решения →