@sazhyk

Как правильно выбрать отношение полей в данном случае?

Делаю на Django небольшой сервис корпоративный. Суть. Есть некоторый Товар. Доступные названия этих товаров создают в админке. Затем на сайте пользователь формирует Заявки из этих товаров. При этом в одной заявке может быть только 1 товар, но несколько штук. Потом пользователь может сформировать Заказ из Заявок. При этом я должен быть точно уверен, что одна и та же заявка не попадет в разные заказы.
Модель Товара
class Product(models.Model):
    title = models.CharField()
Модель Заявки
class Order(models.Model):
    order_product = models.ForeignKey(Product)
    order_date = models.DateField( )
    number = models.IntegerField( )
Предполагаемая модель Заказа
class Proposal(models.Model):
    order_list = models.ManyToManyField(Order)    # Какое правильно выставить отношение?
Но если будет отношение многие-ко-многим, то получится, что одну и ту же заявку можно будет "засунуть" в разные заказы. Как правильно "объединить" заявки в заказы?
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Ariurn
Если я правильно понял, у вас интернет-магазин по схеме: пришёл, добавил товары в корзину и оформил заказ. Как это делал я:
  • Для каждой новой сессии (django.contrib.sessions.models.Session), которая создаётся при посещении пользователем (даже не авторизованным) сайта, создаётся заказ (Order), который имеет статус "Не оформлен" и не отображается в админ-панели. Он имеет ForeignKey (у которого on_delete=models.CASCADE), привязанный к Session. Например: order.session=request.session
  • При добавлении товара в "корзину" создаётся модель OrderProduct, которая имеет два ForeignKey: один - Product, второй - Order, у каждого on_delete=models.CASCADE. Они указывают на то, какой товар добавлен в корзину и какой пользователь его добавил соответственно. Также, нужны доп. поля (например, количество товара, добавленного в корзину).
  • При оформлении заказа, ему устанавливается статус "Оформлен", он отображается в админ-панели, и администратор может с ним работать.

Есть один нюанс: при большом потоке пользователей на сайт будет создаваться много заказов (Order), которые не будут удаляться, т.к. Session автоматически не удаляются (насколько мне известно). Решение проблемы: запускайте через cron команду python manage.py clearsessions
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы