【问题标题】:django party rental company inventory modeldjango 派对租赁公司库存模型
【发布时间】:2015-03-13 20:05:09
【问题描述】:

一家派对公司出租椅子、桌子和帐篷。这些都有固定的价格,但如果将物品装在一个包装中(例如包装 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)

因此,Item 可以是椅子、桌子、30x40 帐篷等,这些物品与 ItemInventory 相关联,以计算剩余的出租数量。 Order 可以包含任意数量的任何 ItemOrder.total 将合计为每个(Order.items.price x 数量)。

问题 1,我如何在 Order 中包含每个 Item 的数量?

问题 2,我应该为包创建模型还是在视图中包含包逻辑?

【问题讨论】:

    标签: django model relational-database inventory


    【解决方案1】:

    这只是我的意见...

    Item 应该有一个 quantity 字段,用于跟踪给定时间的库存数量。每次下订单时都会更新此字段。

    您的“订单”表单类需要验证订单中的每个商品是否有足够的剩余商品,或者引发验证错误,或者创建延期交货等。

    ItemInventory 可能应该更改为“LineItem”之类的内容 - 它表示订购了多少个项目。它还应该有一个“价格”字段来记录下订单时的价格。此模型需要Order 的外键。

    如果您的 LineItem 不包含价格,并且您更改了相关商品的价格,那么如果您仅依赖 Item.price,则每个订单总额都可能不正确

    Order 不需要“项目”字段,因为您可以使用 order.lineitem_set.all() 查询集来检索这些项目。您还可以在该查询集上使用价格列的总和来生成总计,而不是使其成为一列,但这是主观的。

    【讨论】:

      【解决方案2】:

      我为一家 POS 软件公司做了大量的数据库工作,这是他们大多数数据库的结构。 - ItemMaster(存储有关项目的数据,例如库存、价格等) - TransactionMaster(存储有关交易的主数据(金额、投标、余额等) - TransactionDetail(为事务中的每个项目提供一行,以 TransactionMaster 作为外键引用)

      这个方法可以让你抓取Transactions,然后通过外键引用抓取明细,明细表将保存发票上每个行项目的价格、数量等。我在多个软件中看到过这种方法,似乎很可靠。

      【讨论】:

        猜你喜欢
        • 2023-01-14
        • 2016-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-24
        • 2013-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多