Django用值注释:如何访问值?

时间:2010-01-13 21:09:35

标签: django

我有一个带有“处置”的模型和带有“推销员”的模型。 我想获得每个推销员的平均折扣。 这是我正在尝试的:

sm = Disposal.objects.annotate(average_discount=Avg('discount')).values('average_discount','sm__fname','sm__lname').order_by('-discount')
    for s in sm:
         data[0] = data[0]+s.sm__fname+','+s.sm__lname+','+str(s.average_discount)

现在我收到了这个错误:

  

处置对象没有属性   sm__fname

当我在django shell中执行它时,查询运行正常 - 但是如何访问这些值? 非常感谢你!

1 个答案:

答案 0 :(得分:1)

首先,正如the documentation所述,使用values会为您提供词典的列表,而不是模型对象。因此,每个s都没有属性sm_whatever,它有一个字典键。所以试试这个:

s['sm__lname']

但是,我必须说我根本不需要在这里使用values。你最好只得到实际的物体:

sm = Disposal.objects.annotate(average_discount=Avg('discount')).order_by('-discount')

然后正常访问相关的相关对象:s.fname