Если я правильно понял, у вас интернет-магазин по схеме: пришёл, добавил товары в корзину и оформил заказ. Как это делал я:
- Для каждой новой сессии (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