0

ビューの1つでフィルタークエリを設定しようとしています...基本的に私のコードは次のようになります:

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,})

これまでのところ、最後の2つのビューのいずれかを試してみると、最初のビュー、つまりインベントリからのみクエリセットを取得しています。URLConfファイルは次のようになります。

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

4 に答える 4

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変数に一致します。私が間違っているかどうかを知って幸せです!

于 2009-11-12T14:45:01.393 に答える
0

あなたのURLConfで、あなたがすでに言及したものの上に、あなたは以下のものを上書きするマッピングを持っているかもしれません-例えば-のように

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

これにより、インベントリ内のすべての呼び出しがメソッドインベントリにヒットします。

これは、Djangoがシリアル方式でそれを通過するためです。最初に一致する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'),
于 2009-11-12T08:42:40.193 に答える
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'^Inventory / $'は厳密にそれと一致し、'/'を超えるものはありません。これにより、他のURLが適切なビューにマップされます。

于 2009-11-12T09:45:33.790 に答える
0

d {4}は、常に4つのdと正確に一致し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'),
于 2009-11-12T14:56:56.627 に答える