【问题标题】:django-filter for django rest frameworks用于 django rest 框架的 django-filter
【发布时间】:2018-10-02 02:15:26
【问题描述】:

我希望我的问题有解决方案。我正在尝试从如下所示的路径调用 javascript 中的 url: /api/vendor_filter/?city=&zipCode=29615&dateServing=04%2F21%2F2018

我已将呼叫过滤器设置为从日期和邮政编码呼叫数据。

我希望实现的是因为这个调用已经将日期填充为当前日期和邮政编码从注册的设备邮政编码,在这种情况下 29615 的邮政编码实际上从 29601、29627 中提取一个范围,因此任何邮政编码在该范围内被检索。

这与声明 list(range(29601,29627+1)) 相同,以便用户邮政编码提取该范围内数据库中的所有邮政编码项目。

邮政编码可以如上所示,也可以是 68011,在这种情况下,我希望范围为 (67998, 68024),因此无论调用中的用户邮政编码如何,邮政编码都表示在该范围的中间,

【问题讨论】:

标签: django django-rest-framework django-filter


【解决方案1】:

通过以下方式更改您的过滤器:

class VendorFilter(django_filters.FilterSet):
    zipCode = django_filters.NumericRangeFilter(queryset=VendorListing.objects.all())    

    class Meta:
        model = VendorListing
        fields = ['dateServing','city', 'zipCode']

您可以使用 django_filters 应用程序中的过滤器。阅读docs

【讨论】:

  • 我已经更正了 VendorFilter 并阅读了有关 NumericRange 的 Django 过滤器的文档,这需要调整 VendorListing 模型,这是必须实现范围逻辑的地方吗? ,我最初的查询引用了从 url 请求获取数据范围的需要,因此如果 x = zipCode 则 x-8、x+8 范围内的所有 zipCode 都是有效数据。我已经能够从我的电话中产生 x 了。此外,如果需要修改数据模型,是否有更好的方法来生成具有不同数据对象的范围。
  • 实际修改模型并在 zipCode 字段中使用 Postgres NumericRange 是完成这项工作的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 2016-08-10
  • 2013-10-05
  • 2019-01-09
  • 2017-07-02
  • 2016-02-02
相关资源
最近更新 更多