2015-03-13 42 views
0

派對公司出租椅子,桌子和帳篷。這些都有一定的價格,但如果物品在包裝中b(作業(例如包裝A包括:一個18x30的帳篷,72把椅子和12張桌子),則可節省費用。我正在處理三種不同的軟件包:a,b和c。到目前爲止我的模型如下。django派對租賃公司庫存模型

from django.db import models 
from django.contrib.auth.models import User 


class Item(models.Model): 
    name = models.CharField(max_length=255) 
    price = models.DecimalField(decimal_places=2, max_digits=5) 

class ItemInventory(models.Model): 
    item = models.ForeignKey(Item) 
    quantity = models.PositiveIntegerField() 

class Order(models.Model): 
    user = models.ForeignKey(User) 
    items = models.ManyToManyField(Item) 
    total = models.DecimalField(decimal_place=2, max_digits=5) 

所以,一個項目可能是一個椅子,桌子,30X40帳篷等,這些項目都與ItemInventory算剩下多少租出去。 訂單可以包括任意數量的任何項目Order.total總結爲每個(Order.items.price x數量)。

問題1,我應該如何在每個項目中包含數量訂單

問題2,我應該爲包創建模型還是在視圖中包含包邏輯?

回答

1

這只是我的意見了......

Item可能應該有用來跟蹤有多少庫存在給定的時間quantity場。每次下訂單時都會更新此字段。

您的「訂單」形式的類需要驗證在爲了每一個項目,有足夠的離開了那個項目,或拋出一個驗證錯誤,或者創建一個延期交貨等

ItemInventory或許應該更改爲「LineItem」之類的東西 - 它表示訂購了多少項。它也可能有一個「價格」字段來記錄下訂單時的價格。該模型需要一個外鍵Order

如果您的LineItem不包括價格,並且更改了相關項目的價格,每一個訂單總量可能是不正確的,如果你只是依靠Item.price

Order並不需要一個「項目」字段,因爲您可以使用order.lineitem_set.all()查詢集來檢索這些項目。您也可以使用該查詢集上價格列的總和來生成總數,而不是將其作爲列,但這是主觀的。

0

我爲POS軟件公司做了很多數據庫工作,這是他們大多數數據庫的結構。 - ItemMaster(存儲有關物品的數據,例如庫存,價格等) - TransactionMaster(存儲有關交易的主數據(金額,投標,餘額等) - TransactionDetail(爲交易中的每個物品提供一行TransactionMaster作爲外鍵參考)

此方法允許您抓取Transactions,然後通過外鍵參考獲取詳細信息,詳細信息表將保存發票上每個行項目的價格,數量等。在多個軟件中見過這種方法,似乎很可靠。