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

Раздел 1 (1.1–1.4): Настройка проекта + Раздел 2 (2.1–2.8): Модели + Раздел 3 (3.0–3.6): Admin

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

  1. 1.1: Клонировать репозиторий
  2. 1.2: Создать venv, активировать, установить зависимости из requirements.txt
  3. 1.3: Применить миграции, заполнить .env
  4. 1.4: Запустить сервер, проверить http://127.0.0.1:8000
  5. 2.1: Модель Category: name (unique, max 40), Meta ordering+plural
  6. 2.2: Модель Supplier: name/email/phone — все unique
  7. 2.3: Модель Product: ForeignKey→Category и Supplier (PROTECT), article с db_index
  8. 2.4: Модель ProductDetail: OneToOne→Product (CASCADE), nullable поля
  9. 2.5: Модель Address: страна/город/улица/дом, plural='addresses'
  10. 2.6: Модель Customer: OneToOne→Address (SET_NULL), soft delete, get_latest_by
  11. 2.7: Модель Order: ForeignKey→Customer (PROTECT), get_latest_by
  12. 2.8: Модель OrderItem: FK→Order (CASCADE), FK→Product (PROTECT)
  13. 3.0: Импортировать все 8 моделей в admin.py
  14. 3.1–3.6: Admin-классы для Category, Supplier, Product, Address, Customer, Order

Решения →

Раздел 1: Скачивание репозитория

Задачи 1.1–1.4: подготовка рабочего окружения. Выполняются один раз перед началом работы над моделями.

Задание 1.1: Клонирование репозитория

  1. Откройте терминал на вашем компьютере.
  2. Перейдите в директорию, куда вы хотите клонировать проект.
  3. Выполните команду для клонирования репозитория.
  4. Перейдите в директорию с клонированным проектом.

Задание 1.2: Установка зависимостей

  1. Создайте виртуальное окружение для проекта.
  2. Активируйте виртуальное окружение.
  3. Установите зависимости проекта из файла requirements.txt.

Задание 1.3: Настройка базы данных

  1. Примените миграции для настройки базы данных.
  2. Заполните параметрами вашей базы данных приложенный файл .env.

Задание 1.4: Запуск сервера разработки

  1. Запустите сервер разработки, чтобы убедиться, что проект настроен правильно.
  2. Откройте браузер и перейдите по адресу http://127.0.0.1:8000, чтобы убедиться что проект работает.

Раздел 2: Создание моделей

Задачи 2.1–2.8: создайте модели Django в models.py вашего приложения. После создания каждой группы моделей выполните python manage.py makemigrations и python manage.py migrate.

Задание 2.1: Создание модели Category

  1. Создайте модель Category с полем name, которое:
    • Имеет максимальную длину 40 символов.
    • Должно быть уникальным.
  2. Реализуйте метод __str__, чтобы он возвращал значение поля name.
  3. Добавьте мета-класс для модели:
    • Установите сортировку по полю name в алфавитном порядке.
    • Установите множественное число для отображения модели как categories.

Задание 2.2: Создание модели Supplier

  1. Создайте модель Supplier с полями:
    • name (максимальная длина 100 символов, уникальное значение).
    • contact_email (уникальное значение).
    • phone_number (максимальная длина 20 символов, уникальное значение).
  2. Реализуйте метод __str__, чтобы он возвращал значение поля name.

Задание 2.3: Создание модели Product

  1. Создайте модель Product с полями:
    • name (максимальная длина 100 символов).
    • category (внешний ключ на модель Category с поведением PROTECT при удалении и с названием обратной связи products).
    • supplier (внешний ключ на модель Supplier с поведением PROTECT при удалении и с названием обратной связи products).
    • price (десятичное поле с максимумом 10 цифр и 2 десятичными знаками).
    • quantity (положительное целое число).
    • article (максимальная длина 100 символов, уникальное значение, имеет пояснение "Unique string product id" и индекс).
    • available (логическое поле с значением по умолчанию True).
  2. Реализуйте метод __str__, чтобы он возвращал значение поля name.
  3. Добавьте мета-класс для модели:
    • Установите сортировку по полям category и quantity в алфавитном порядке.

Задание 2.4: Создание модели ProductDetail

  1. Создайте модель ProductDetail с полями:
    • product (один к одному внешний ключ на модель Product с поведением CASCADE при удалении и с названием обратной связи details).
    • description (текстовое поле, может быть пустым и иметь значение null).
    • manufacturing_date (дата, может быть пустой и иметь значение null).
    • expiration_date (дата, может быть пустой и иметь значение null).
    • weight (десятичное поле с максимумом 5 цифр и 2 десятичными знаками, может быть пустым и иметь значение null).
  2. Реализуйте метод __str__, чтобы он возвращал строку "Details of {название продукта}".

Задание 2.5: Создание модели Address

  1. Создайте модель Address с полями:
    • country (максимальная длина 100 символов).
    • city (максимальная длина 100 символов).
    • street (максимальная длина 255 символов).
    • house (максимальная длина 6 символов).
  2. Реализуйте метод __str__, чтобы он возвращал строку в формате "{street}, {house}".
  3. Добавьте мета-класс для модели:
    • Установите множественное число для отображения модели как addresses.

Задание 2.6: Создание модели Customer

  1. Создайте модель Customer с полями:
    • first_name (максимальная длина 50 символов).
    • last_name (максимальная длина 50 символов).
    • email (уникальное значение).
    • phone_number (максимальная длина 15 символов).
    • address (один к одному внешний ключ на модель Address, может быть пустым, с поведением SET_NULL при удалении и с названием обратной связи customer).
    • date_joined (дата и время, устанавливаемые автоматически при создании записи).
    • deleted (логическое поле с значением по умолчанию False).
    • deleted_at (дата и время, может быть пустым и иметь значение null).
  2. Реализуйте метод __str__, чтобы он возвращал строку в формате "{first_name} {last_name}".
  3. Добавьте мета-классы для модели:
    • Установите сортировку по полю date_joined в порядке от самых новых записей к самым старым.
    • Установите поле date_joined как используемое для получения последней записи.

Задание 2.7: Создание модели Order

  1. Создайте модель Order с полями:
    • order_date (дата и время, устанавливаемые автоматически при создании записи).
    • customer (внешний ключ на модель Customer с поведением PROTECT при удалении и с названием обратной связи orders).
  2. Реализуйте метод __str__, чтобы он возвращал строку в формате "Order {id} by {customer}".
  3. Добавьте мета-классы для модели:
    • Установите сортировку по полю order_date в порядке от самых новых записей к самым старым.
    • Установите поле order_date как используемое для получения последней записи.

Задание 2.8: Создание модели OrderItem

  1. Создайте модель OrderItem с полями:
    • order (внешний ключ на модель Order с поведением CASCADE при удалении и с названием обратной связи order_items).
    • product (внешний ключ на модель Product с поведением PROTECT при удалении и с названием обратной связи order_items).
    • quantity (положительное целое число).
    • price (десятичное поле с максимумом 10 цифр и 2 десятичными знаками).
  2. Реализуйте метод __str__, чтобы он возвращал строку в формате "{quantity} x {product} for {order}".

Раздел 3: Создание Admin-моделей

Задачи 3.0–3.6: настройка отображения моделей в Django Admin. Код помещается в admin.py вашего приложения.

Задание 3.0: Импорт моделей

Импортируйте в admin.py все модели.

Задание 3.1: Настройка модели Category в Admin

  1. Зарегистрируйте модель Category в Admin с использованием декоратора @admin.register.
  2. Создайте класс CategoryAdmin, чтобы настроить отображение модели:
    • Установите отображение поля name в списке записей.
    • Добавьте возможность поиска по полю name.
    • Установите сортировку записей по полю name в алфавитном порядке.

Задание 3.2: Настройка модели Supplier в Admin

  1. Зарегистрируйте модель Supplier в Admin с использованием декоратора @admin.register.
  2. Создайте класс SupplierAdmin:
    • Установите отображение полей name, contact_email, phone_number в списке записей.
    • Добавьте возможность поиска по полям name, contact_email и phone_number.
    • Установите сортировку записей по полю name в алфавитном порядке.

Задание 3.3: Настройка модели Product в Admin

  1. Зарегистрируйте модель Product в Admin с использованием декоратора @admin.register.
  2. Создайте класс ProductAdmin:
    • Установите отображение полей name, category, supplier, price, quantity, article, available в списке записей.
    • Добавьте фильтрацию записей по полям category, supplier и available.
    • Добавьте возможность поиска по полям name и article.
    • Установите сортировку записей по полям category и quantity в алфавитном порядке.
    • Сделайте поля price, quantity и available редактируемыми прямо в списке записей.

Задание 3.4: Настройка модели Address в Admin

  1. Зарегистрируйте модель Address в Admin с использованием декоратора @admin.register.
  2. Создайте класс AddressAdmin:
    • Установите отображение полей country, city, street, house в списке записей.
    • Добавьте возможность поиска по полям country, city, street и house.
    • Установите сортировку записей по полям country, city и street в алфавитном порядке.

Задание 3.5: Настройка модели Customer в Admin

  1. Зарегистрируйте модель Customer в Admin с использованием декоратора @admin.register.
  2. Создайте класс CustomerAdmin:
    • Установите отображение полей first_name, last_name, email, phone_number, date_joined, deleted в списке записей.
    • Добавьте возможность поиска по полям first_name, last_name, email, phone_number.
    • Установите сортировку записей по полю date_joined в порядке от самых новых записей к самым старым.
    • Добавьте фильтрацию записей по полю deleted.
    • Сделайте поле deleted редактируемым прямо в списке записей.

Задание 3.6: Настройка модели Order в Admin

  1. Зарегистрируйте модель Order в Admin с использованием декоратора @admin.register.
  2. Создайте класс OrderAdmin:
    • Установите отображение полей id, order_date, customer в списке записей.
    • Добавьте возможность поиска по полям customer__first_name, customer__last_name и customer__email.
    • Установите сортировку записей по полю order_date в порядке от самых новых заказов к самым старым.