2013-11-28 4 views
0

내가 장고를 사용하기 시작하고 압축을 해제하고 나는 내 응용 프로그램에서이 코드를 가지고 : 다음 cadena장고 오류 : 너무 많은 값이

filtro = "marca:samsung_modelo:s3" 
mifiltro = filtro.split('_') 
cadena = '0' 

for caracteristica in mifiltro: 
    if not cadena == '0': 
     cadena += ", " 
    elif cadena == '0': 
     cadena = '' 

    aux = caracteristica.split(':') 
    cadena += aux[0] + "='" + aux[1] + "'" 

은 다음과 같습니다

marca='samsung',modelo='s3' 

내가 원하는

productos = Producto.objects.filter(cadena) 

을하지만 오류 "너무 많은 값을 풀고"얻을 : 같은 필터로이 변수를 사용합니다.

내 코드를 작성하는 경우 : 그것은 잘 작동

productos = Producto.objects.filter(marca='samsung',modelo='s3') 

. 문자열을 사용하여 객체를 필터링 할 수 있습니까?

답변

2

당신은 다음 ** 사용하여 매개 변수로 DICT의 모든 값을 풀고 dict를 사용할 수 있습니다

_vals = {'marca': 'samsung', 'modelo': 's3'} 
productos= Producto.objects.filter(**_vals) 
1

내 코드는 마지막 작품! Q 객체를 사용해야하므로 다음과 같이 코드를 수정했습니다.

filtro = "marca:1|2" 
aux = filtro.split(':') 
mismarcas = aux[1].split('|') 
mimarca = [] 

for marca in mismarcas: 
    mimarca += [Q(**{ aux[0]: marca})] 

productos = Producto.objects.filter(reduce(operator.or_, mimarca)) 
관련 문제