Как создать вычитание в инвентаре при оформлении заказа? [Django] [Python] [Сайт электронной коммерции]
Я новичок в python/django. Я решил создать сайт электронной коммерции с использованием django для академического проекта. Я смог достаточно развить проект и достичь понимания предмета, но сейчас у меня проблемы с поиском способа вычитать количество товаров, перечисленных в инвентаре, всякий раз, когда делается заказ.
Это код для моделей, каждый продукт имеет свое собственное количество на складе, называемое инвентаризацией:
class Product(models.Model):
name = models.CharField(max_length=200, null=True)
price = models.FloatField()
description = models.TextField(default='', null=True, blank=True)
digital = models.BooleanField(default=False,null=True, blank=True)
image = models.ImageField(null=True, blank=True)
inventory = models.IntegerField(default=0)
def __str__(self):
return self.name
def has_inventory(self):
return self.inventory > 0
Этот код я сделал для вычитания на основе количества заказанного товара, но я не могу заставить его работать, он не вычитает количество товаров из инвентаря на складе товара.
class OrderItem(models.Model):
product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
quantity = models.IntegerField(default=0, null=True, blank=True)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.product) + " x " + str(self.quantity)
def inventory(self):
product.inventory = self.inventory
product.inventory -= int(self.quantity)
return inventory
Что я могу сделать, чтобы это сработало?
Вся логика/действие должны быть написаны в файле views.py
. Вы можете создать функцию, которая принимает запрос, и когда она его принимает, она принимает все значения, введенные через форму, и вы можете использовать filter
для фильтрации продуктов, которые вы хотите вычесть из инвентаря, и update
запрос Django для обновления инвентаря.
Внутри вашей функции views это должно выглядеть примерно так:
Product.objects.filter(name = name, description = description, digital = digital).update(Inventory = F('Inventory')-inventory)
Вот документация Django по запросам: Django's Making Queries
Мне кажется, что в приведенном выше фрагменте есть несколько проблем.
Во-первых, OrderItem.inventory
не ссылается на правильное значение, оно должно быть таким, как в приведенном ниже фрагменте.
def inventory(self):
// remember the current stock is stored on Product.inventory
return self.product.inventory - self.quantity
Во-вторых, имя метода должно быть remaining_stock
, а не inventory
, чтобы избежать недопонимания.
def remaining_stock(self):
return self.product.inventory - self.quantity
Кроме того, не забудьте, если вы хотите сохранить inventory
продукта, вызовите метод save
после успешной вставки OrderItem.