Django - 如何获取对象的十进制字段的值

时间:2016-12-20 01:16:25

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

我查看了QuerySet API参考,但我找不到任何允许我获取特定对象字段的实际值(十进制)的内容。

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

1 个答案:

答案 0 :(得分:1)

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

首先请注意,此result = Hours.objects.filter(fullname=fullname).values('hours')返回dicts列表,而不是Decimal列表。因此,如果您需要hours,请执行此操作hour = result[0].get('hours')。但在此之后你无法做hours = hours + 1.5。因为hours具有Decimal类型,您应该首先将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并保存。