2013-03-26 1 views
0

쿼리 세트에서 values_list를 호출하는 기존 코드가 있습니다. 이 쿼리 세트에 여분을 사용하여 뭔가를 추가해야합니다. values_list 전에 extra를 추가하면 values_list 뒤에 쿼리에서 추가 항목이 사라집니다. values_list에 대한 호출 후에 추가 호출을하면 효과가있는 것처럼 보입니다. 추가 작업은 쿼리에 없습니다.동일한 쿼리 세트에 values_list 및 extra 사용

다음은 일부 디버거 출력입니다. 추가 values_list 전에 - 거기 후 사라 :

-> queryset = queryset.extra(select={field['name'] : field['name']}) 
(Pdb) n 
-> queryset = queryset.values_list(*self.get_search_columns()) 
(Pdb) print queryset.query 
SELECT (top-bottom) AS `top-bottom`, .... 
(Pdb) n 
-> data = list(queryset) 
(Pdb) print queryset.query 
SELECT `data_cst`.`image_measurer_id`, `data_cst`.`image_pr_top_id`, 
`data_target`.`name`, `data_recipe`.`name`, `data_cst`.`ep`, 
`data_lot`.`name`, `data_cst`.`date_time`, `data_cst`.`bottom` FROM 
`data_cst` INNER JOIN `data_target` ON (`data_cst`.`target_name_id` = 
`data_target`.`id`) INNER JOIN `data_recipe` ON 
(`data_cst`.`recipe_id` = `data_recipe`.`id`) INNER JOIN `data_lot` ON 
(`data_cst`.`lot_id` = `data_lot`.`id`) WHERE (`data_cst`.`date_time` 
<= 2013-03-26 23:59:59 AND `data_cst`.`date_time` >= 2010-03-26 
00:00:00) ORDER BY `data_cst`.`date_time` DESC 

하지만 여분이 전혀 쿼리하지 않는 역순 경우 : 두 values_list를 사용하는 몇 가지 방법이 있나요

-> queryset = queryset.values_list(*self.get_search_columns()) 
(Pdb) n 
-> queryset = queryset.extra(select={field['name'] : field['name']}) 
(Pdb) print queryset.query 
SELECT `data_cst`.`image_measurer_id`, `data_cst`.`image_pr_top_id`, 
`data_target`.`name`, `data_recipe`.`name`, `data_cst`.`ep`, 
`data_lot`.`name`, `data_cst`.`date_time`, `data_cst`.`bottom` FROM 
`data_cst` INNER JOIN `data_target` ON (`data_cst`.`target_name_id` = 
`data_target`.`id`) INNER JOIN `data_recipe` ON 
(`data_cst`.`recipe_id` = `data_recipe`.`id`) INNER JOIN `data_lot` ON 
(`data_cst`.`lot_id` = `data_lot`.`id`) WHERE (`data_cst`.`date_time` 
<= 2013-03-26 23:59:59 AND `data_cst`.`date_time` >= 2010-03-26 
00:00:00) ORDER BY `data_cst`.`date_time` DESC 
{Pdb) n 
-> data = list(queryset) 
(Pdb) print queryset.query 
SELECT `data_cst`.`image_measurer_id`, `data_cst`.`image_pr_top_id`, 
`data_target`.`name`, `data_recipe`.`name`, `data_cst`.`ep`, 
`data_lot`.`name`, `data_cst`.`date_time`, `data_cst`.`bottom` FROM 
`data_cst` INNER JOIN `data_target` ON (`data_cst`.`target_name_id` = 
`data_target`.`id`) INNER JOIN `data_recipe` ON 
(`data_cst`.`recipe_id` = `data_recipe`.`id`) INNER JOIN `data_lot` ON 
(`data_cst`.`lot_id` = `data_lot`.`id`) WHERE (`data_cst`.`date_time` 
<= 2013-03-26 23:59:59 AND `data_cst`.`date_time` >= 2010-03-26 
00:00:00) ORDER BY `data_cst`.`date_time` DESC 

및 같은 쿼리 세트에 여분?

(Pdb) CST.objects.all().extra(select={'ep': 1}).values_list('image_measurer_id') 
[(86456L,), (86454L,), (86452L,), (86450L,), (86448L,), (86446L,), 
(86444L,), (86442L,), (86440L,), (86438L,), (86436L,), (86434L,), 
(86432L,), (86430L,), (86428L,), (86426L,), (86424L,), (86422L,), 
(86420L,), (86418L,), '...(remaining elements truncated)...'] 

이 행 당 2 열을 반환해야합니다

여기가 작동하지 않습니다 보여주는 아주 간단한 예입니다.

+0

제공하신 정보는 당신을 쉽게 도와 줄 수 없습니다. PDB 외부의 정보를 제공하고 현재있는 클래스를 문서화하고'fields [ 'name']가 무엇인지 – MattH

+0

간단한 예제로 내 게시물을 업데이트했습니다. –

답변

1

추가 선택을 values_list에 포함시켜야합니다.

예.

+0

Doh! 감사합니다! –

관련 문제