2016-12-10 2 views
0

Ich verwende Django-Filter auf sehr standardmäßige Weise.Django Filter Buttons

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

Aber ich möchte benutzerdefinierte Quick-Filter-Schaltflächen erstellen. Wie die letzten 1 Tage und die letzten 7 Tage, die diese Abfrage im Wesentlichen ausführen.

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

ist etwas, das mit django-Filter durchgeführt werden kann oder muss ich einen Standard-POST erstellen oder Antwort erhalten?

Dank Ivo Donchev für die Hilfe gelöst. Mit Ihrem Code habe ich es so gelöst. Ich wollte nicht die Route von Klassen basierten Ansichten gehen, wie ich Funktionen verwende.

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) 

Ich weiß, dass ich ein wenig die Sicht rationalisieren können. Nächste Aufgabe

Antwort

0

Ja, Sie können es mit django Filter Method verwenden und wie so Methode namens filter_your_filed_name Umsetzung:

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 

In einem Tag in der Vorlage: „href =" your-url.com last_updated = some-Wert '“

Und in der Ansicht:

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

Danke, habe ich, dass etwas hinzugefügt, aber wie würde ich es auf eine Schaltfläche auf der Vorlage verlinken auf diesen Filter que verlinken ry eingestellt? – Spinnaay

+0

Nun können Sie es als get Parameter verwenden: –

+0

Ich habe gerade den Beitrag –