Как реализовать многоступенчатое создание товара со связанными моделями (налог, валюта, область доставки, категория) в Django Rest Framework?

Я работаю над процессом создания продукта с использованием Django Rest Framework (DRF), и у меня есть модели для Tax, Currency, DeliveryArea, Category и Product. Процесс создания разделен на несколько этапов, на каждом из которых фиксируются различные части информации о продукте. Вот чего я пытаюсь добиться:

Модели:

  • Product: Основная модель, представляющая продукт.
  • Категория: Категория, к которой принадлежит продукт.
  • Валюта: Валюта для цены товара.
  • DeliveryArea: Территория доставки продукта.
  • Tax: Налоговые данные для продукта.

Шаги в процессе:

  1. Шаг 1: Название, описание и категория продукта.
  2. Шаг 2: Цена, валюта и регион доставки.
  3. Шаг 3: Налоговая информация.

Что мне нужно:

  • Постоянство данных: Мне нужно сохранять данные постепенно, по мере того как пользователь завершает каждый шаг формы.
  • Пошаговое редактирование: Пользователи должны иметь возможность вернуться к любому предыдущему шагу и обновить свои данные, не теряя прогресса в уже пройденных шагах.
  • Связанные модели: Мне нужно обработать отношения между моделью Product и другими моделями (Category, Currency, DeliveryArea и Tax).

Подход, который я рассматривал:

  • Я планирую использовать DRF-сериализаторы для каждого шага, с соответствующими полями для этого шага.
  • Я хочу использовать пользовательский набор представлений с действиями для каждого шага формы.
  • Я хочу обрабатывать сохранение данных каждого шага в базе данных постепенно и обеспечить сохранение данных каждого шага в соответствующих моделях.

Примеры моделей:

class Category(models.Model):
    name = models.CharField(max_length=255)

class Currency(models.Model):
    code = models.CharField(max_length=3)

class DeliveryArea(models.Model):
    area_name = models.CharField(max_length=255)

class Tax(models.Model):
    name = models.CharField(max_length=255)
    percentage = models.DecimalField(max_digits=5, decimal_places=2)

class Product(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
    currency = models.ForeignKey(Currency, on_delete=models.SET_NULL, null=True, blank=True)
    delivery_area = models.ForeignKey(DeliveryArea, on_delete=models.SET_NULL, null=True, blank=True)
    tax = models.ForeignKey(Tax, on_delete=models.SET_NULL, null=True, blank=True)

Я попробовал создать модель для каждого шага и сделать так, чтобы каждый шаг указывал на предыдущий, подобно реверсивным связанным спискам. пример: шаг 1 <- шаг 2 <- шаг 3 Но я думаю, что такая реализация непрактична, кто-то предложил мне использовать наборы представлений (я все еще новичок в drf). Имейте в виду, что код, который я предоставил, это просто пример. Я не могу поделиться кодом компании, но некоторые поля в моделях товаров не могут быть ни null, ни blank, однако они устанавливаются пользователем только на следующем шаге.

Вернуться на верх