我查看了QuerySet API参考,但我找不到任何允许我获取特定对象字段的实际值(十进制)的内容。
我尝试的所有内容都不会将其作为实际的十进制值返回。例如,Hours.objects.filter(fullname = fullname).values(hours)不会将小时数作为小数值返回。我正在尝试获取用户的小时数,以数学方式为其添加一个数字(例如15.5 + 4.25)并将其保存回来(如19.75)。
答案 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
并保存。