2016-12-10 4 views
0

私は非常に標準的な方法でDjangoフィルターを使用しています。Djangoフィルターボタン

class TaksFilter(django_filters.FilterSet): 
    class Meta: 
     model = Task 
     fields = ['lastUpdated'] 

ただし、カスタムのクイックフィルタボタンを作成したいとします。このクエリーセットを本質的に実行する最後の1日および最後の7日と同じです。

task = Task.objects.filter(lastUpdated__range=["2016-12-09", "2016-12-10"]) 

これはdjango-filterで行うことができますか、標準のPOSTまたはGET応答を作成する必要がありますか?

は助けを

おかげイヴォDonchevを解決しました。あなたのコードを使用して、私はこれをこのように解決しました。私は関数を使っているので、クラスベースのビューのルートを下りたくない。

form.py

class TaskFilter(django_filters.FilterSet): 
last_updated = django_filters.MethodFilter() 

class Meta: 
    model = Task 
    fields = ['lastUpdated'] 

def filter_last_updated(self, value, queryset): 
     qs = queryset.filter(lastUpdated__gte=datetime.now()-timedelta(days=value)) 
     return qs  

view.py

def tasks(request): 

    tasks = TaskFilter(request.GET, queryset=Task.objects.all()) 

    if request.method == "GET":  

     if '1' in request.GET: 

      value = 1 
      tasks = TaskFilter(request.GET, queryset=(TaskFilter.filter_last_updated(tasks, value, queryset=(Task.objects.all())))) 

    context = { 
    'tasks':tasks, 
    } 

return render(request, 'tasks.html', context) 

私は、ビューを少し合理化することができます知っています。次のタスク。

答えて

0

はい、あなたはMethodFilterを使用し、そのようなメソッドの名前filter_your_filed_nameを実装ジャンゴフィルタでそれを行うことができます:テンプレート内のタグで

class TaksFilter(django_filters.FilterSet): 
    last_updated = django_filters.MethodFilter() 
    class Meta: 
     model = Task 

    def filter_last_updated(self, queryset, value): 
     qs = queryset.filter(...) 
     # your custom logic here using the passed value 
     return qs 

:? 「のhref = 'your-url.com LAST_UPDATED =一部の値は、「」

とビューで

class YourView(View): 
    def get(self, *args, **kwargs): 
     data = {k: v for (k, v) in self.request.GET.items()} 
     qs = Task.objects.all() 
     filter = TaskFilter(data, queryset=qs) # using the filter 

     return super().get(*args, **kwargs) 
+0

おかげで、私はそのビットを追加しましたが、私は、テンプレート上のボタンにリンクする方法をそのフィルタQUEにリンクしますライセット? – Spinnaay

+0

これは、パラメータを取得するためにリンクすることができます: –

+0

私はちょうど –

関連する問題