【发布时间】:2012-08-26 06:23:49
【问题描述】:
我正在开发我的应用程序中的过滤器功能。我通过 jquery 向 Django 发送一个逗号分隔的字符串(在 jquery 中,我将空格替换为 +,以便可以通过网络发送)。
/?ajax&sales_item=t2,+t1
现在在我检索 GET 参数的视图中,我可以看到 Django 已经将 + 替换为空格,这很棒。然后我用逗号分割关键字并去掉空格。
sales_item_raw = request.GET['sales_item']
sales_item_keywords = sales_item_raw.split(',')
我需要首先检查给定名称是否作为销售项目存在。我必须使用icontains,因此sales_items 可以不止一项。
for item in sales_item_keywords:
sales_items = profile.company.salesitem_set.filter(item_description__icontains=item.strip())
最后但并非最不重要的一点是,查询集用于过滤给定 sales_items 的交易:
deals_queryset = deals_queryset.filter(sales_item__in=sales_items)
如果用户只过滤一个可以正常工作的关键字,但是如果有两个关键字,sales_items 显然会在每次循环迭代中被覆盖。
解决此问题的最有效方法是什么?我是否应该将每次迭代中sales_items的内容附加到循环外的列表中?并最终将新列表发送到最终deals_queryset.filter?
我不确定这是否是解决这个问题的好方法......
【问题讨论】:
-
“我通过 jquery 向 Django 发送一个逗号分隔的字符串(在 jquery 中,我将空格替换为 +,以便可以通过网络发送)。”没有必要; Django 处理多个 GET 参数没有问题with the same name.
-
感谢您指出。这与多个 GET 参数无关,如果我没有用 + 替换空格,我只会得到传入的第一个参数。
/?ajax&sales_item=t2,空格切断了第二个参数。至少这是我的 serverrun 上发生的事情。 -
/?ajax&sales_item=t2&sales_item=t1 -
啊现在我明白我的错误在哪里了。再次感谢你的帮助。 :)
-
如果有人想提出更通用的东西,值得看看 django 的管理过滤器作为灵感来源github.com/django/django/blob/master/django/contrib/admin/…
标签: django