Django如何获取obj的十进制字段的值

2024-05-23 20:05:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我查看了querysetapi引用,没有找到任何东西可以让我获得特定对象字段的实际值(十进制)。在

我尝试过的所有方法都不会将其作为实际的十进制值返回。例如,Hours.objects.filter(fullname=fullname).values(hours)不以十进制值的形式返回小时数。我试图得到一个用户的小时数,用数学方法加上一个数字(例如15.5+4.25),然后把它存回去(如19.75)。在


Tags: 对象方法用户objects数字filter形式values
1条回答
网友
1楼 · 发布于 2024-05-23 20:05:43

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

首先请注意,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

^{pr2}$

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

from django.db.models import F

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

这将获得所有与filter相关的Hours对象添加到它的hours字段1.5并保存它。在

相关问题 更多 >