2017-10-20 9 views
0

商品のリストを作成しているListViewがあります。そして、私は条件付きでテンプレートからパラメータを送信してこのクエリーセットを変更したいと思います。私はsupplier_idや日付のような何かに何かをフィルタリングしたいと言ってください。私は、状況に応じてのみ、私のクエリセットを変るか、私は、引数を渡すことに応じて、それぞれの状況に一つだけのListViewを使用して処理する必要があり、それぞれの状況または拡張するためのListViewはパラメータに基づいてクエリーセットを作成します

class ProductListView(ListView): 
... 
def get_queryset(self): 
     return Supplier.objects.all() 

class ProductBySupplierListView(ProductListView): 

def get_queryset(self): 
     return Supplier.objects.filter(supplier=self.kwargs['sup']) 

または

class ProductListView(ListView): 
... 
def get_queryset(self): 
    if self.kwargs['sup']: 
     return Supplier.objects.filter(supplier=sup) 
    else: 
     return Supplier.objects.all().annotate(prd_cnt=Count('product')) 
ベースのリストビューを新しいビューを作成する必要があります

または、複数の条件ソート問題を処理するためのより良いパターンがあるかもしれません。

私はそれがFiltering Objects in Class based view Django using Query parameters?のようにすべてを行うことができることを知っていますが、その良いデザインか、前述の拡張とクエリーセットメソッドをオーバーライドするような何かを好むべきです。

+0

[クエリパラメータを使用したクラスベースビューのDjangoでのオブジェクトのフィルタリング?](https://stackoverflow.com/questions/31960428/filtering-objects-in-class-based-view-django-using-query-パラメータ) – YPCrumble

+0

はい、しかし、私はそれがデザインスタンプから正しいのでしょうか?私はそれを必要とするたびにクエリーセットメソッドを拡張してオーバーライドしようとしており、各ソート条件に対して別々のURLマッピングを持っています。 – Dmitrii

+0

「別個のURLマッピング」とはどういう意味ですか?ここでの[受け入れられた回答](https://stackoverflow.com/a/31960938/2532070)は、設計の観点からは正しいです。したがって、サプライヤによるフィルタリングには、独自のサブクラス化されたビューが必要であることを意味する言及されていないものがない限り、フィルタリングの2番目の方法は正しいです。 – YPCrumble

答えて

0

それが優れている1言うのは難しいのですが、両方は仕事に近づきます。とにかく最後に私はより良いアプローチを見つけました - 基準に基づいてフィルタリングのために行われるdjangoフィルタを使用することです。

関連する問題