2016-04-12 20 views
0

API ile bir django uygulamasına sahibim. Birçok sorgular oluşturdum:DateTime filtresine göre django filtreleriyle sorun

class ShellMessageFilter(django_filters.FilterSet): 
    created = django_filters.DateTimeFilter(name="created",lookup_type="gte") 

    class Meta: 
     model = Server 
     fields = ['created'] 


class ServersDateList(ListAPIView): 
    serializer_class = ServerSerializer 
    queryset = Server.objects.all() 
    filter_class = ShellMessageFilter 

URL'den hangi tarih damgası alıp filtreleyebilirsiniz. Ancak şimdilik, son iki saat boyunca güncellenen sunucu modelini gösteren yeni bir filtre oluşturmam gerekiyor. Bunu nasıl yapabilirim?

Böyle bir şey deneyeceğim ancak filtre bozuldu ve tüm öğeleri gösterilen:

class ShellMessageFilter2Hour(django_filters.FilterSet): 

    import datetime 

# lastTwoHourDateTime = datetime.datetime.now() - datetime.timedelta(hours = 1) 
# last_update = django_filters.DateTimeFilter(name=str(lastTwoHourDateTime.strftime('%Y-%m-%d %H:%M')),lookup_type="gte") 

# last_update2 = datetime.datetime.now() - datetime.timedelta(minutes = 10) 
# last_update = last_update2.strftime('%Y-%m-%d+%H:%M') 

    last_update = django_filters.DateTimeFilter("2016-04-23T15:31:50") 
    created = django_filters.DateTimeFilter(name="last_update",lookup_type="gte") 

    class Meta: 
     model = Server 
     fields = ['last_update'] 


class ServersDate2HourList(ListAPIView): 
    serializer_class = ServerSerializer 
    queryset = Server.objects.all() 
    filter_class = ShellMessageFilter2Hour 

yardım edin, benim hatam mı?

cevap

0

Böyle bir durumda arkadaşınız MethodFilter sizin ve görüşünüz için bir filtre sınıfı kullanmanıza olanak tanır.

Öyle gibi uygulayabilirsiniz:?

class ShellMessageFilter(django_filters.FilterSet): 
    def updates_in_last_two_hours(self, value): 
     # You can toggle the value between True and False 
     if value == 'true': 
      right_now = datetime.datetime.now() 
      last_two_hours = right_now - datetime.timedelta(hours=2) 
      return self.filter(created__gte=last_two_hours) 
     else: 
      return self.filter() 
    created = django_filters.DateTimeFilter(name="created",lookup_type="gte") 
    updated_last_two_hours = django_filters.MethodFilter(
     action=updates_in_last_two_hours) 

class Meta: 
    model = Server 
    fields = ['created', 'updated_last_two_hours'] 

Sonra böyle bir görünümde updated_last_two_hours kullanabilirsiniz updated_last_two_hours = true