【问题标题】:Django: Add and Subtract from inventory in modelsDjango:从模型中的库存中添加和减去
【发布时间】:2017-07-11 18:48:31
【问题描述】:

我正在尝试做一些我认为很简单的事情,但事实证明它现在对我来说有点挑战。

我正在尝试在 Django 1.11 和 Python 3.6 中为钞票构建一个简单的 ATM 系统。

我基本上需要跟踪有存货的纸币以及每种纸币的数量。但我意识到,使用我习惯的逻辑,我只创建模型的新实例,而不是添加到数量字段。

我知道如何使用数量字段来添加订单项目(但这也是创建订单的新实例),但是如何在不创建新实例的情况下更改库存?

我想它应该与 ManyToManyField 和 through 参数有关。我也不确定是否应该将每张钞票分开为一个类别或将它们全部归为一个类别。

有什么想法吗?

这是我的模型:

class Cedula(models.Model):
    um          = models.IntegerField(blank=False, default=0)
    dois        = models.IntegerField(blank=False, default=0)
    cinco       = models.IntegerField(blank=False, default=0)
    dez         = models.IntegerField(blank=False, default=0)
    vinte       = models.IntegerField(blank=False, default=0)
    cinquenta   = models.IntegerField(blank=False, default=0)
    cem         = models.IntegerField(blank=False, default=0)

    class Meta:
        verbose_name = "Cédula"
        verbose_name_plural = "Cédulas"

【问题讨论】:

  • 您所拥有的只是一行,每当数字发生一些变化时,该行都会更新。

标签: python django django-models inventory


【解决方案1】:

在您的模型中一切看起来都很好。您将只有一行,将在第一次创建后更新。

首先创建Cedula的对象

from app.models import Cedula
cedula = Cedula()
cdeula.save() # This will instantiate the row with all entries 0.

要更新,您必须执行此操作

from app.models import Cedula
from django.db.models import F
cedula = Cedula.objects.all()[0]
cedula.dios = F('dios')+ 2 # Here adding 2 or any number which you want to update with
cedula.vinte = F('vinte') -5 # Here subtracting with 5 or again number which you want to update with
cedula.save()

通常对于没有太多关系事情要做的模型或其中没有单个条目的模型,最好在单独的启动脚本中创建它们的对象并在运行服务器之前运行它们。以便该数据库可以填充之前的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多