派对公司出租椅子,桌子和帐篷。这些都有定价,但如果物品在包装中被捣乱,则可以节省成本(例如,包装A包括:一个18x30帐篷,72个椅子和12个桌子)。我正在处理三个不同的包:a,b和c。到目前为止我的模型如下。
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,我应该为包创建模型还是在视图中包含包逻辑?
答案 0 :(得分:1)
这只是我的意见......
Item
应该有一个quantity
字段,用于跟踪给定时间内库存中的库存量。每次下订单时,此字段都会更新。
您的"订单"表单类需要验证对于订单中的每个项目,是否有足够的项目,或抛出验证错误,或创建后退订单等。
ItemInventory
应该更改为" LineItem" - 它表示订购了多少项目。它也应该有一个"价格"字段记录订单下达时的价格。此模型需要Order
的外键。
如果您的LineItem也没有包含价格,并且您更改了相关商品的价格,那么如果您只是依赖Item.price
Order
不需要"项目"字段,因为您可以使用order.lineitem_set.all()
查询集来检索这些项目。您还可以使用该查询集上的价格总和列来生成总数,而不是将其设为列,但这是主观的。
答案 1 :(得分:0)
我为POS软件公司做了很多数据库工作,这是他们大多数数据库的结构。 - ItemMaster(存储有关物品的数据,例如库存,价格等) - TransactionMaster(存储有关交易的主数据(总和,投标,余额等) - TransactionDetail(为TransactionMaster作为外键引用的事务中的每个项目提供一行)
此方法允许您获取交易,然后通过外键引用获取详细信息,详细信息表将保存发票上每个行项目的价格,数量等。我在多个软件中看到过这种方法,看起来非常可靠。