2009-11-16 2 views
1

내 앱용 필터링 솔루션을 구현할 수있었습니다 ... 지금까지 차량 인벤토리에 대한 연도, 제작자 및 본문 스타일별로 필터링했습니다. 내가 원하는 것은 이렇게 레코드를 필터링하는 것입니다 :Django에서 매개 변수를 증가시켜 레코드 필터링

내가 만든 Acura를 가정하면, 결과 페이지에서 다른 필터 즉, 연도 또는 바디 스타일 중 하나를 선택하면됩니다. Acura와 선택한 년 또는 몸 스타일을 포함하는 기록.

필터 중 하나에 대한 내 코드는 다음과 같습니다 :

def year_filter(request, year): 
    vehicle_query = Vehicle.objects.filter(
    common_vehicle__year__year__exact=year 
    ).exclude(status__status='Incoming') 

    vehicle_list = vehicle_query.order_by(
    'common_vehicle__series__model__manufacturer__manufacturer', 
    'common_vehicle__series__model__model', 
    'common_vehicle__year' 
) 

    vehicle = paginate(request, vehicle_list) 

    year_count = vehicle_query.order_by(
    '-common_vehicle__year__year') 
      .values('common_vehicle__year__year') 
      .annotate(count=Count('id') 
    ) 
    make_count = vehicle_query.order_by(
     'common_vehicle__series__model__manufacturer__manufacturer') 
     .values('common_vehicle__series__model__manufacturer__manufacturer') 
     .annotate(count=Count('id') 
) 
    style_count = vehicle_query.order_by(
    'common_vehicle__body_style__style') 
     .values('common_vehicle__body_style__style') 
     .annotate(count=Count('id') 
) 
    color_count = vehicle_query.order_by(
     'exterior_colour__exterior_colour') 
     .values('exterior_colour__exterior_colour') 
     .annotate(count=Count('id') 
) 

    return render_to_response('vehicles.html', { 
     'vehicle': vehicle, 
     'make_count': make_count, 
     'year_count': year_count, 
     'style_count': style_count, 
    }) 

답변

2
첫째

, 어떤 스타일의 조언 : 네 개의 별도의 쿼리를 만들고 있어요,하지만 그들 각각의 정확히 같은 방법으로 시작합니다

vehicle_list = vehicle_query.order_by(
    'common_vehicle__series__model__manufacturer__manufacturer', 
    'common_vehicle__series__model__model', 
    'common_vehicle__year' 
) 
: 가독성을 위해서

Vehicle.objects.filter(
    common_vehicle__series__model__manufacturer__manufacturer=make 
).exclude(
    status__status='Incoming' 
) 
, 당신은 다음 각 후속 쿼리에서 사용할 수있는 변수, 예를 들어 vehicle_query,이 할당 고려하시기 바랍니다

쿼리가 마지막 순간까지 평가되지 않으므로 효율성에 영향을주지 않지만 훨씬 더 읽기 쉽습니다.

이제 질문에 대답하십시오. 분명히 선택한 값을 한보기에서 다음보기로 저장할 수있는 방법이 필요합니다. 나는 다른 견해가이 견해와 어떻게 어울리는지를 이해할 수 없다. 나의 초기 성향은 그것을 숨겨진 분야 또는 쿼리 쓰레기에 넣는 것이다.

if request.POST: 
    chosen_vehicle = request.POST['vehicle_type'] 
    request.session['vehicle_type'] = chosen_vehicle.id 
    return HttpResponseRedirect('/next/view/') 

하고 다음보기에서

:

previously_chosen = request.session['vehicle_type'] 
filtered = Vehicle.objects.get(id=previously_chosen) 

그 일을합니까하지만 어쩌면 좋은 생각이 될 것 세션에 저장?

+0

내가 이것을 시험해보고 작동하는지 보게하십시오 ... 그냥 깨어났습니다 –

+0

이것은 잘 작동합니다 ... thnx –

+0

코드를 작성했지만 테스트 해본 적이 없었습니다 ... 잘 작동합니다. 분명히 그렇지 않습니다 ... 세션이 저장되지 않습니다. 나는 위와 같은 다섯 가지 견해를 가지고 있습니다 ... 년, 메이크, 시리즈, 컬러 및 바디 스타일. 정말이 coz에 대한 도움이 필요합니다. 아이디어가 없습니다. –

관련 문제