2017-08-08 106 views
0

我正在Django的REST框架一個REST API的,我有一種存儲模式像這個 -過濾通過Django的REST的框架範圍內對象屬性的對象

class Commodity(models.Model): 
     def countryname(self): 
     return self.country.country_name 
     country=models.ForeignKey(Country) 
     commodity_name=models.CharField(max_length=255) 
     commodity_type=models.IntegerField(choices=COMMODITY_TYPE) 
     commodity_year=models.IntegerField(default=None) 
     commodity_production=models.IntegerField(default=None) 

     def __unicode__(self): 
     return self.commodity_name +"-"+str(self.country.country_name) 

數據現在,我想獲取所有落在商品年份範圍內的對象,例如所有那些在1999年至2014年(包括兩者)之間的對象。我一直在使用Django-filter班,但沒有運氣。

class CommodityFilter(filters.FilterSet): 
    start_date = DateFilter(name='commodity_year') 
    end_date = DateFilter(name='commodity_year') 
    class Meta: 
    model = Commodity 
    fields = [ 'country','commodity_name', 'commodity_type','start_date','end_date'] 


class CommodityList(generics.ListCreateAPIView): 

    queryset = Commodity.objects.all() 
    serializer_class = CommoditySerializer 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_class = CommodityFilter 
    permission_classes = [AllowAny] 

如果有人有更好的方法,請指導我。

回答

0

試試這個在CommodityFilter類:

class CommodityFilter(filters.FilterSet): 
    start_date = django_filters.NumberFilter(
     name='commodity_year', lookup_expr='gte') 
    end_date = django_filters.NumberFilter(
     name='commodity_year', lookup_expr='lte') 

    class Meta: 
     model = Commodity 
     fields = [ 'country','commodity_name', 'commodity_type','start_date','end_date'] 
1

您可以使用小於等於且大於等於的範圍進行過濾。

queryset = Commodity.objects.filter(commodity_year__gte=1999, 
            commodity_year__lte=2014) 

上述會給你一個查詢集,其中commodity_year小於2014年和大於1999年在讀Django文檔詳細瞭解gt

注:我不認爲需要過濾器類,因爲它是一個非常簡單的查詢