[英]DoesNotExists query in Python/Django when I build an E-commerce website
[英]How to create a subtraction in the inventory when a order is made? [Django] [Python] [E-commerce website]
我是一個 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
過濾掉要減去其庫存的產品,並通過 Django update
查詢更新庫存。
它應該在您的視圖函數中看起來像這樣:
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
,請在成功插入OrderItem.
后調用save
方法OrderItem.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.