我正在Django Rest Framework中创建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)现在,我想得到属于commodity_year范围内的所有对象,例如,所有commodity_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]如果有人有更好的方法,请指导我。
发布于 2017-08-08 04:20:11
在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']发布于 2017-08-08 04:12:54
可以使用小于等于和大于等于的范围进行筛选。
queryset = Commodity.objects.filter(commodity_year__gte=1999,
commodity_year__lte=2014)以上将为您提供一个查询集,其中commodity_year小于2014年,大于1999年。在django文档中阅读更多关于gt的信息
注意:我认为不需要filter类,因为它是一个非常简单的查询
https://stackoverflow.com/questions/45559071
复制相似问题