Как правильно создать модели Django для чеков?

Всем привет.
Стоит задача отобразить данные по кассовым чекам из базы данных и потом иметь возможность вносить на сайте информацию в базу данных.
Модели базы данных

class Product(models.Model):
    name = models.CharField(max_length=150)
    price = models.FloatField()
    quantity = models.FloatField()
    amount = models.FloatField()

    def __str__(self):
        return self.name


class Receipt(models.Model):
    receipt_date = models.DateTimeField(unique=True)
    name_seller = models.CharField(max_length=150)
    product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
    total_sum = models.CharField(max_length=20)

    def __str__(self):
        return self.name_seller


DBVisualize

62a8e8bdbdf9e569115641.png

Но я что-то уже запутался.
У нас должна быть связь:
Чек: Дата, имя продавца, итог
Товары: Наименование, цена, количество, сумма.

По указанным моделям у меня отображаются продукты во всех чеках одни и те же, а как сделать модели, чтобы была привязка чек = товары по чеку, по порядку как они были добавлены в базу данных?
Сейчас у меня поле product_id не заполняется почему-то...

Пробовал сделать поле с продуктами через ArrayField, работает как надо, но не получилось создать форму, чтобы можно было добавлять корректно информацию по товарам.

UPD: Используется PostgreSQL
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest
Работаю с Python/Django
Обычно минимально-рабочая схема следующая:
Товар: описание конкретного товара (цена, характеристики и прочее)
Заказ: Описание заказа как такового - дата-время/покупатель/статус/возможно - общая цена.
Список товаров в заказе: в минимальном наборе - внешние ключи к товару/заказу и количество.

"Корзина" может быть реализована 2-мя путями (минимум):
Прямо в таблице заказов. При этом такой заказ будет помечен статусом по типу "оформляется" и будет ограничение "1 юзер (кассир?) - 1 оформляющийся заказ"
С помощью сессии
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы