【问题标题】:Django - How to get the value of a decimal field of objectDjango - 如何获取对象的十进制字段的值
【发布时间】:2017-05-05 03:34:54
【问题描述】:

我查看了 QuerySet API 参考,但找不到任何可以让我获取特定对象字段的实际值(以小数形式)的内容。

我尝试过的所有方法都不会将其作为实际的十进制值返回。例如, Hours.objects.filter(fullname=fullname).values(hours) 不会将小时数作为十进制值返回。我正在尝试获取用户的小时数,在数学上添加一个数字(例如 15.5 + 4.25)并将其保存回来(如 19.75)。

【问题讨论】:

  • 你的 Hours 模型是什么样的?
  • 对于初学者来说应该是.values("hours")(注意引号)。如果不发布您的models.py,我们就不能再说什么了。

标签: python django django-models django-forms django-queryset


【解决方案1】:

如果我正确理解了您的问题,您需要过滤 Hours 表中的对象并更新它的值。

首先请注意,此result = Hours.objects.filter(fullname=fullname).values('hours') 返回字典列表,而不是十进制列表。所以如果你需要得到hours,你应该这样做hour = result[0].get('hours')。但是在这之后你不能做hours = hours + 1.5。因为hoursDecimal 类型,所以你应该先将浮点数的1.5 转换为十进制:

import decimal

result = Hours.objects.filter(fullname=fullname).values('hours')
hour = result[0].get('hours')
hour_difference = decimal.Decimal(1.5)
hour = hour + hour_difference 

但是使用 Django,您可以更轻松地进行更新。只需使用update

    Hours.objects.filter(fullname=fullname).update(hours=20.5)

如果您需要增加当前值,那么您可以使用F expression

from django.db.models import F

Hours.objects.filter(fullname=fullname).update(hours=F('hours') + 1.5)

这会将所有与过滤器相关的 Hours 对象添加到它的 hours 字段 1.5 并保存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2013-08-03
    • 2018-11-03
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多