Как реализовать многоступенчатое создание товара со связанными моделями (налог, валюта, область доставки, категория) в Django Rest Framework?
Я работаю над процессом создания продукта с использованием Django Rest Framework (DRF), и у меня есть модели для Tax
, Currency
, DeliveryArea
, Category
и Product
. Процесс создания разделен на несколько этапов, на каждом из которых фиксируются различные части информации о продукте. Вот чего я пытаюсь добиться:
Модели:
- Product: Основная модель, представляющая продукт.
- Категория: Категория, к которой принадлежит продукт.
- Валюта: Валюта для цены товара.
- DeliveryArea: Территория доставки продукта.
- Tax: Налоговые данные для продукта.
Шаги в процессе:
- Шаг 1: Название, описание и категория продукта.
- Шаг 2: Цена, валюта и регион доставки.
- Шаг 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, однако они устанавливаются пользователем только на следующем шаге.