django - 带有extra方法的queryset返回空,count()则返回

时间:2009-10-31 15:24:12

标签: django

这是我写的一位相关经理:

class PortfolioItemManager(models.Manager):

    use_for_related_fields = True

    def extended(self): 

       return self.extra(select = {'current_price':'current_price', 'current_value':'current_price*quantity', 'gain':'current_price*quantity - cost'},
                      tables = ['pm_core_contract', ],
                      where = ['pm_core_contract.id = pm_core_portfolioitem.contract_id', ]
               )

以下结果让我感到困惑:

In [10]: PortfolioItem.objects.extended()
Out[10]: []
In [11]: PortfolioItem.objects.extended().count()
Out[11]: 402

count()的结果是正确的。我在这里缺少什么?

编辑:生成的SQL是正确的,可以直接对db执行。

EDIT2:问题源于最后2个选择参数,它们具有算术运算功能。

1 个答案:

答案 0 :(得分:1)

我想我刚刚发现了问题。谢谢Alex,他的评论引发了这个想法:

PortfolioItem模型具有属性current_valuecurrent_gain,我一直试图用计算的SQL字段替换它们。在没有删除属性的情况下,将其中一个extra()方法的选择字段命名为current_value是错误的,因为这导致模型具有两个具有相同名称的字段。当我取消重叠时,一切都变好了。课程是学到的。