添加四个参数值时,注释总和不起作用

时间:2013-05-07 18:32:57

标签: python django python-2.7

我正在使用Django 1.4和Python 2.7。

我正在做一些值的总和......当我这样做时,这项工作很完美:

CategoryAnswers.objects.using('mam').filter(category=cat["category"], brand=cat["brand"], category__segment_category=cat["category__segment_category"]).values('category__name', 'brand__name','brand__pk').annotate(total=Sum('answer'))

并生成一个查询:

    SELECT `category`.`name`, `brand`.`name`, `category_answers`.`brand_id`, SUM(`category_answers`.`answer`) AS `total` 
FROM `category_answers` 
INNER JOIN `category` 
ON (`category_answers`.`category_id` = `category`.`id`) 
INNER JOIN `brand` 
ON (`category_answers`.`brand_id` = `brand`.`id`) 
WHERE (`category_answers`.`category_id` = 6  AND 
`category_answers`.`brand_id` = 1  AND 
`category`.`segment_category_id` = 1 ) 
GROUP BY `category`.`name`, `brand`.`name`, `category_answers`.`brand_id` 
ORDER BY NULL

但是当我添加一个新值时,这不起作用:

CategoryAnswers.objects.using('mam').order_by().filter(category=cat["category"], brand=cat["brand"], category__segment_category=cat["category__segment_category"]).values('category__name','category__pk','brand__name','brand__pk').annotate(total=Sum('answer'))

看到返回的查询,问题是django在一个错误的字段(category_answersid)上添加组:

SELECT `category`.`name`, `category_answers`.`category_id`, `brand`.`name`, `category_answers`.`brand_id`, 
SUM(`category_answers`.`answer`) AS `total` 
FROM `category_answers` 
    INNER JOIN `category` 
      ON (`category_answers`.`category_id` = `category`.`id`) 
    INNER JOIN `brand` 
      ON (`category_answers`.`brand_id` = `brand`.`id`) 
WHERE (`category_answers`.`category_id` = 6  AND 
`category_answers`.`brand_id` = 1  AND 
`category`.`segment_category_id` = 1 ) 
    GROUP BY `category_answers`.`id`, `category`.`name`, `category_answers`.`category_id`, `brand`.`name`, `category_answers`.`brand_id` 
ORDER BY NULL

如果我删除任何参数这项工作,所以我不相信这是特定问题的参数...我做错了什么?

1 个答案:

答案 0 :(得分:0)

我无法解决这个问题,因此......我使用原始SQL查询执行此操作:

cursor = connections["mam"].cursor()        
cursor.execute("SELECT B.name, A.category_id, A.brand_id, SUM(A.answer) AS total, C.name FROM category_answers A INNER JOIN category B ON A.category_id = B.id INNER JOIN brand C ON A.brand_id = C.id WHERE A.brand_id = %s AND A.category_id = %s AND B.segment_category_id = %s", [cat["brand"],cat["category"],cat["category__segment_category"]])
c_answers = cursor.fetchone()

这不是最好的方法,但它有效。 :)