首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Django-rest框架中的对象属性范围过滤对象

通过Django-rest框架中的对象属性范围过滤对象
EN

Stack Overflow用户
提问于 2017-08-08 04:01:15
回答 2查看 910关注 0票数 1

我正在Django Rest Framework中创建Rest,其中我有一个存储这样的数据的模型-

代码语言:javascript
复制
   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_year范围内的所有对象,例如,所有commodity_year在1999年到2014年之间(都包括在内)的对象。我一直在使用Django-filter类,但没有运气。

代码语言:javascript
复制
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]

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-08 04:20:11

CommodityFilter类中尝试如下:

代码语言:javascript
复制
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']
票数 0
EN

Stack Overflow用户

发布于 2017-08-08 04:12:54

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

代码语言:javascript
复制
queryset = Commodity.objects.filter(commodity_year__gte=1999,
                                    commodity_year__lte=2014)

以上将为您提供一个查询集,其中commodity_year小于2014年,大于1999年。在django文档中阅读更多关于gt的信息

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45559071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档