这是我写的一位相关经理:
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个选择参数,它们具有算术运算功能。
答案 0 :(得分:1)
我想我刚刚发现了问题。谢谢Alex,他的评论引发了这个想法:
PortfolioItem模型具有属性current_value
和current_gain
,我一直试图用计算的SQL字段替换它们。在没有删除属性的情况下,将其中一个extra()方法的选择字段命名为current_value是错误的,因为这导致模型具有两个具有相同名称的字段。当我取消重叠时,一切都变好了。课程是学到的。