2015-03-13 76 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,然后通过外键参考获取详细信息,详细信息表将保存发票上每个行项目的价格,数量等。在多个软件中见过这种方法,似乎很可靠。