在Django rest框架中通过一系列对象属性筛选对象

在Django rest框架中通过一系列对象属性筛选对象,django,django-rest-framework,django-filter,Django,Django Rest Framework,Django Filter,我正在Django Rest框架中制作一个Rest API,我有一个这样存储数据的模型- class Commodity(models.Model): def countryname(self): return self.country.country_name country=models.ForeignKey(Country) commodity_name=models.CharField(max_length=255)

我正在Django Rest框架中制作一个Rest API,我有一个这样存储数据的模型-

   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)
现在,我想得到属于某一商品年范围的所有对象,例如,
commodity\u year
在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]

如果有人有更好的方法,请指导我。

您可以使用小于等于和大于等于的范围进行筛选

queryset = Commodity.objects.filter(commodity_year__gte=1999,
                                    commodity_year__lte=2014)
上面将为您提供一个查询集,其中
商品年
小于2014年,大于1999年。了解更多关于django docs的信息


注意:我认为不需要filter类,因为它是一个非常简单的查询

请在
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']