Tastypie十进制和datetime筛选器不工作

2024-05-14 17:21:25 发布

您现在位置:Python中文网/ 问答频道 /正文

以下ltegte筛选器查询返回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

这里是型号.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,
        }

在设置.py使用\u TZ=False

我正在运行Postgresql 9.3、Django 1.6和Tastypie 0.12.2。 不知道我做错了什么。你知道吗

谨致问候, 艾伦


Tags: pylocalhosthttpmodelsdtallcurlstage
1条回答
网友
1楼 · 发布于 2024-05-14 17:21:25

我想您需要选择runoff介于100和150之间的河流,或者dt_timestamp介于2015-01-01T03:00和2015-01-07T18:00之间的河流。在这种情况下,请尝试:

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

相关问题 更多 >

    热门问题