以下 lte 和 gte 过滤器查询返回0个对象:
curl http://localhost/river/river/?runoff__lte=100.0&runoff__gte=150.0
curl http://localhost/river/river/?runoff__lte=100&runoff__gte=150
http://localhost/river/river/?dt_timestamp__lte=2015-01-01T03:00&dt_timestamp__gte=2015-01-07T18:00&format=json
此处 models.py
class River(models.Model):
dt_timestamp = models.DateTimeField()
stage = models.DecimalField(max_digits=10, decimal_places=3, blank=True, null=True)
runoff = models.DecimalField(max_digits=10, decimal_places=3)
api.py
class RiverResults(ModelResource):
class Meta:
queryset = River.objects.all()
resource_name = 'river'
authorization = Authorization()
filtering = {
'user': ALL_WITH_RELATIONS,
'dt_timestamp': ALL
'stage': ALL,
'runoff': ALL,
}
在settings.py USE_TZ = False
运行Postgresql 9.3 ,Django 1.6 和Tastypie 0.12.2 。 不知道到底出了什么问题。
此致 艾伦
答案 0 :(得分:0)
我猜您需要在2015-01-01T03:00和2015-01-07T18:00之间选择runoff
介于100和150或dt_timestamp
之间的河流。在这种情况下,请尝试:
http://localhost/river/river/?runoff__gte=100.0&runoff__lte=150.0
http://localhost/river/river/?runoff__gte=100&runoff__lte=150
http://localhost/river/river/?dt_timestamp__gte=2015-01-01T03:00&dt_timestamp__lte=2015-01-07T18:00
如果您需要选择径流低于100或大于150的河流,那么您需要覆盖build_filters
功能:
def build_filters(self, filters=None):
qs_filters = super(RiverResults, self).build_filters(filters)
if filters.get('runoff_not_between') is not None:
runoff_not_between = filters.get('runoff_not_between').split(',')
qs_filters = qs_filters.update(Q(runoff__lte=runoff_not_between[0]) | Q(runoff__gte=runoff_not_between[1]))
return qs_filters
并使用:
http://localhost/river/river/?runoff_not_between=100.0,150.0
http://localhost/river/river/?runoff_not_between=100,150