首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >django设计模式/最佳实践:过滤查询集

django设计模式/最佳实践:过滤查询集
EN

Stack Overflow用户
提问于 2012-10-05 00:47:33
回答 1查看 782关注 0票数 2

我有一个页面,在该页面中,我向用户显示查询集的结果。我想做的是允许用户点击一个链接来应用过滤器。

目前,我所做的是让链接传递“获取”参数到页面,以便应用过滤器。这些过滤器可以是对其他模型或自定义过滤器的引用(例如,未分配的过滤器)。

为了提供良好的用户体验,实现需要做一些事情。

  • 视图:
    1. 检查传递的筛选器参数是否有效。
    2. 检查它是哪种类型的过滤器(基于其他模型或自定义过滤器),以便将正确的条件应用于查询集
    3. (可选)一种使过滤器累积的方法(例如,您可以继续添加过滤器)

  • 在模板中:
    1. 根据筛选器选择显示正确的结果集
    2. 当显示过滤器时,识别我们应用的过滤器,以便当前应用的过滤器显示为文本而不是超链接。

我认为这必须足够普遍,以至于某些人必须有类似的设计模式或最佳实践,而不是视图和模板中明显的if/else语句。

在那里吗?

EN

回答 1

Stack Overflow用户

发布于 2012-10-05 03:29:02

我发现Django管理员处理这种功能的方式是一个很好的模式。如果您不熟悉,请查看管理员中的list_filter选项。它与您所描述的类似,但您的更通用。也许这能帮你思考一些想法?

  • 首先,对于实际的querystring块,只需传递Django-ORM查找键和值对。例如,?sites__id__exact=1tags__in=words等。由于您希望允许跨模型查找,因此需要在字符串中提供另一个部分,以包含模型名称,而不是太难。
  • 为了检查过滤器是否有效,只需确保模型/字段查找是有效的。通过分割每个QS块的部分,您可以识别模型、字段名、查找和值。然后,使用Django的内置功能来验证模型上是否存在字段名。你也可以和ForeignKey一起这么做。这是Django怎么做的
  • 您可以很容易地继续添加过滤器。您将提供视图和显示这些过滤器的表单,以便为用户保留和重新填充这些过滤器。此外,您也可以轻松地持久化查询字符串。基本上,这里始终都有相同的读取/解析功能,没有什么特别之处。

我想钥匙是自动的,让它尽可能的干燥。不要屈服于一堆if语句。安全地将这些查找传递到ORM中也非常容易,而且很容易捕捉到糟糕的查找并向用户提供有意义的错误消息。

我希望这对你的道路有所帮助!)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12738052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档