回答

收藏

在django中使用工期字段进行汇总

技术问答 技术问答 215 人阅读 | 0 人回复 | 2023-09-12

我的模型是:
' B% U4 R1 D, w2 `1 _" Zclass Mo(Model):    dur = DurationField(default=timedelta    price_per_minute = FloatField(default=0.0)    minutes_int = IntegerField(default=0)  # dublicates data from dur ,only for test一些测试数据:1 K* u9 t: R3 u5 f
for i in range(4):    m = Mo(dur=timedelta(minutes=i),          minutes_int=i,          price_per_minute=10.0)    m.save()我想乘dur用price_per_minute和发现Sum:
! Y9 A. T: C) C" X+ a( Pr = Mo.objects.all().aggregate(res=Sum(F('dur')*F('price_per_minute')))print(r['res']/(10e6 * 60))但:
# O$ x& ~/ b: y6 a! kInvalid connector for timedelta: *.说明:在数据库中,数据库DurationField以简单的BIGINT以微秒的形式存储。如果我知道如何以总计的方式获得它,则将其除以(10e6 *60)并支付分钟。; n- S! \; Z' F9 ^; A
如果我改用简单的方法,那么IntegerField一切正常:
( k& b' R  {+ h: e9 u$ ur = Mo.objects.all().aggregate(res=Sum(F('minutes_int')*F('price_per_minute')))print(r['res']/(10e6*60))因此,我需要将某些类型转换为整数,是否有可能将持续时间转换为一些额外的字段?9 N/ l: }4 g1 Y; J! a1 }4 @/ M
r = Mo.objects.all().extra({'mins_int': 'dur'}).aggregate(res=Sum(F('mins_int')*F('price_per_minute')))print(r['res']),但
: N! E5 A5 q  a6 V, J  @Cannot resolve keyword 'mins_int' into field. Choices are: dur,id,minutes_int,price_per_minute               
3 ?/ s/ M4 X, ]& x  G7 R( R+ g- D    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则