2009-11-12 2 views
0

내가 ... 내보기 중 하나에 필터 쿼리를 설정하기 위해 노력하고있어 기본적으로 내 코드는 아래와 같습니다장고 필터링 문제

def inventory(request): 
    vehicle = Vehicle.objects.all().exclude(status__status='Incoming').order_by('common_vehicle__series__model__manufacturer__manufacturer', 'common_vehicle__series__model__model', 'common_vehicle__year') 

    year_count = Vehicle.objects.exclude(status__status='Incoming').order_by('-common_vehicle__year__year').values('common_vehicle__year__year').annotate(count=Count('id')) 
    make_count = Vehicle.objects.exclude(status__status='Incoming').order_by('common_vehicle__series__model__manufacturer__manufacturer').values('common_vehicle__series__model__manufacturer__manufacturer').annotate(count=Count('id')) 

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

def year_filter(request, year): 
    vehicle = Vehicle.objects.filter(common_vehicle__year__year=year) 

    return render_to_response('filter.html', {'vehicle':vehicle,}) 

def make_filter(request, make): 
    vehicle = Vehicle.objects.filter(common_vehicle__series__model__manufacturer__manufacturer=make).exclude(status__status='Incoming') 

    return render_to_response('filter.html', {'vehicle':vehicle,}) 

지금까지 내가 마지막 두 가지보기 중 하나를하려고 할 때, 나는 단지 첫 번째보기, 즉 재고에서 쿼리 세트를 가져오고 있습니다. URLConf 파일은 다음과 같습니다

(r'^inventory/year/(?P<year>d{4})/?$', 'app.vehicles.views.year_filter'), 
(r'^inventory/make/(?P<make>)/', 'app.vehicles.views.make_filter'), 

답변

1

표현이 누락 된 것처럼 보입니다.

(r'^inventory/year/(?P<year>d{4})/?$', 'app.vehicles.views.year_filter'), 
(r'^inventory/make/(?P<make>)/', 'app.vehicles.views.make_filter'), 

<year>

는 4 자리의 일련의 일치, <make> 일치 무엇?

(r'^inventory/make/(?P<make>[-\w]+)/', 'app.vehicles.views.make_filter'), 

이는 make 변수와 일치합니다. 내가 틀렸다면 알았어!

+0

일치하는 비트에 대해 모두 잊어 버렸습니다 ... 감사합니다 bennylope. 이것은 그러나 내게 빈 queryset을 제공합니다 ... 그래서 어떤 문제가 될 수 있을지 모르겠다 –

+0

내 나쁜 ... 그냥 내 실수를 본 ... 이제 필터가 작동합니다. –

0

그것은 당신이 이미 언급 한 것들의 위, 아래의 것들에 우선 매핑 할 수도 있습니다, 당신의 URLConf에 보이는 - 말을 같은 -

(r'^inventory/', 'app.vehicles.views.inventory'), 

은 인벤토리의 모든 호출이 메소드 인벤토리에 도달하도록합니다.

이것은 장고가 직렬 방식으로 진행되기 때문입니다. 먼저 일치하는 URL이 있으면 해당 URL에 도달합니다. 이 문제를 극복하기 위해, 다음과 같은 방법으로 URL을 순서 -

(r'^inventory/year/(?P<year>d{4})/?$', 'app.vehicles.views.year_filter'), 
(r'^inventory/make/(?P<make>)/', 'app.vehicles.views.make_filter'), 
(r'^inventory/', 'app.vehicles.views.inventory'), 
+0

내가 메이크업 및 연도의 것들과 그 이전에 같은 매핑이 않았다 ... 나는 URLConf으로 업데이트되었습니다 당신이 지정했는데, 여전히 인벤토리 방법을 때리고 있어요 –

+0

내가 문제를 해결할 방법은 다음과 같습니다 : 1. urlconf를 백업하십시오. 2. urlconf에서 views.inventory 에 도달 할 수있는 모든 줄을 제거하십시오. 3. 나머지 URL이 year_filter 및 make_filter에 도달하도록하십시오. 4. 일단 완료되면 모든 것이 적절할 때까지 적절한 위치에 하나씩 URL을 다시 넣습니다. – Koran

0

코란은 옳은 길이다. 당신의 URLconf이를 가진보십시오 :

(r'^inventory/$', 'app.vehicles.views.inventory'), 
(r'^inventory/year/(?P<year>d{4})/?$', 'app.vehicles.views.year_filter'), 
(r'^inventory/make/(?P<make>)/', 'app.vehicles.views.make_filter'), 

정규식 r에 '^ 재고/$는'엄격 단지는 '/'과거 아무것도 일치합니다. 이렇게하면 다른 URL이 적절한보기로 매핑됩니다.

+0

OK ... 적어도 지금은이 문제가 마지막 두 정규식이라고 생각합니다 ... 나는 이제 그들에게 404를 얻습니다. –

0

d {4}는 항상 정확히 4d '와 일치합니다 (dddd). 너가 원하는게 그거야?

(r'^inventory/year/(?P<year>d{4})/?$', 'app.vehicles.views.year_filter'), 

내가, 당신이 \d을 탈출해야하는 의심이 비교 :

(r'^inventory/year/(?P<year>\d{4})/?$', 'app.vehicles.views.year_filter'), 
+0

이것은 내가 원하는 것입니다 ... 그러나 나는 탈출구를 빠져 나갔다는 것을 알았습니다 ... 그래서 (r '^ inventory/year/(? P \ d {4})/$ ','app.vehicles.views.year_filter '), 그러나 나에게 준다 : 관련 필드가 유효하지 않은 조회를 가지고있다 : 년 –

+0

나는 그것을 알아 냈다.내 year_count 쿼리에 __exact를 추가하면 오류가 수정되었습니다. –