【问题标题】:Split string value from url and use it in Django QuerySet从 url 拆分字符串值并在 Django QuerySet 中使用它
【发布时间】:2015-04-20 05:55:47
【问题描述】:

这是应该发送到服务器进行查询的数据:

http://127.0.0.1:8000/cnt_bldg/?brgy_id=All&bldg_type=School%2CSport+Center%2FGymnasium%2FCovered+Court%2C

brgy_id=All

bldg_type=School%2CSport+Center%2FGymnasium%2FCovered+Court%2C

如您所见,bldg_type 中有两个值,分别是“School”和“Sport Center/Gymnasium/Covered Court”,其中以逗号分隔,您可以参考下面的 Jquery 代码:

var selected = $('#bldg_type option:selected');
var items = "";
selected.each(function () {
    items += $(this).val() + ",";
});
$.ajax({
    url: "cnt_bldg/",
    type: "GET",
    dataType: "JSON",
    data: {
        'brgy_id': brgy_id,
        'bldg_type': items
    },
    ...

我想根据这些值创建一个查询。到目前为止尝试过这个,首先是拆分值并执行循环并附加列表。这是我的尝试:

...
args = []
get_bldg_type = request.GET.get('bldg_type')
...
if get_bldg_type != '':     
            sp = [x.strip() for x in get_bldg_type.split(',')]
            for term in sp:
                args.append(Q(bldg_type=term))

for myid in ids_high:
    getgeom = FloodHazard.objects.get(id=myid).geom
    response_high = list(PolyStructures.objects.filter(geom__within=getgeom, *args).values(
        'bldg_type','bldg_name').annotate(count=Count('bldg_name')))
    for entry in response_high:
        entry['type'] = 'High'
        to_json.append(response_high)

【问题讨论】:

  • 为什么不发布值而不是获取,以便可以在服务器端接收它作为方法的参数?
  • hmmn..如果我只在 bldg-type 中选择 1 个值,它实际上可以工作。我想问题是,它不会从我的 Ajax 中拆分值。
  • 看到你应该在服务器端方法中将它作为 List 参数接收,因为你是从 ajax 传递列表..
  • 啊好吧...那我该怎么做呢?我将获取值并将其存储在列表变量中?
  • 我对@9​​87654329@ 不太了解。这 link 可能会有所帮助.. :)

标签: jquery python django


【解决方案1】:

我猜您无法沿逗号拆分的原因是逗号转换为 %2C。首先,您需要清理请求中收到的参数。可以这样做:

import urllib
get_bldg_type = urllib.unquote(request.GET.get('bldg_type'))

另外,如果您根据请求中收到的参数过滤结果,我会建议 POST over GET。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    相关资源
    最近更新 更多