簡體   English   中英

下訂單時如何在庫存中創建減法? [Django] [Python] [電子商務網站]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM