当前位置: 首页 > 知识库问答 >
问题:

django设计模式/最佳实践:筛选查询集

贾沛
2023-03-14

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

    视图中的
  • :
    1. 检查传递的筛选器参数是否有效
    2. 检查筛选器的类型(基于其他模型或自定义筛选器),以便将正确的条件应用于查询集
    3. (可选)使筛选器累积的方法(即可以不断添加筛选器)
  1. 根据筛选器选择显示正确的结果集n
  2. 显示筛选器时,请识别应用的筛选器,以便当前应用的筛选器显示为文本,而不是超链接。

共有1个答案

常波鸿
2023-03-14

我发现Django管理员处理这种功能的方式是一个很好的模式。如果您不熟悉,请查看管理中的list_filter选项。它和你描述的相似,但你的更一般。或许这会帮你琢磨一些点子?

>

  • 首先,对于实际的querystring块,您只需传递Django-ORM查找键和值对。例如,?sites__id__exact=1tags__in=words等。由于您希望允许跨模型查找,您需要提供字符串中的其他部分来包括模型名,这并不是太难。

    为了检查筛选器是否有效,您可以简单地确保模型/字段查找有效。通过拆分每个QS块的各个部分,您可以识别模型、字段名、查找和值。然后,使用Django的内置功能来验证model上是否存在fieldname。您也可以使用ForeignKey来完成此操作。这是Django怎么做的

    您可以很容易地添加过滤器。您将提供您的视图和显示这些过滤器的表单以及一些上下文,因此它将为用户持久化并重新填充。此外,您也可以轻松地持久化查询字符串。基本上,您在任何时候都有相同的读取/解析功能,没有什么真正的不同。

    我认为钥匙是自动的,保持它尽可能的干燥。不要屈从于一堆if语句。很容易将这些查找安全地传递到ORM中,也很容易捕获错误的查找并向用户提供有意义的错误消息。

    我希望这能帮助你在你的道路上!:)

  •  类似资料:
    • 本文向大家介绍Android夜间模式最佳实践,包括了Android夜间模式最佳实践的使用技巧和注意事项,需要的朋友参考一下 由于Android的设置中并没有夜间模式的选项,对于喜欢睡前玩手机的用户,只能简单的调节手机屏幕亮度来改善体验。目前越来越多的应用开始把夜间模式加到自家应用中,没准不久google也会把这项功能添加到Android系统中吧。 业内关于夜间模式的实现,有两种主流方案,各有其利弊

    • 我有一个Excel文件,上面有一长串用户名。ColA包含旧用户名ColB包含新用户名。我想在基于excel文件的SQL表中重命名用户。我的问题是:在循环中使用using语句多次调用SQL可以吗?还是有更好的方法,我打开一个连接,让所有的SQL更新查询“一”?

    • 在我的过去,我已经实施了一些网页刮取项目--从小型到中型(大约100.000个刮取页面)不等。通常我的起点是一个索引页,它链接到几个页面,上面有我想刮的细节。最后大部分时间我的项目都起作用了。但是我总是觉得我可以改进工作流程(特别是关于减少我给被清除的网站造成的流量的挑战[和连接到那个主题:被禁止的风险:D])。 这就是为什么我想知道你的(最佳实践)web刮板设计方法(针对小型和中型项目)。 通常

    • 问题内容: 我正在建立MS Access 2007中数据库的查询,并且想知道我当前的设计实践是否达到标准。基本上,数据库是在我来之前配置的,但是我被赋予构建高效查询以提取数据的责任。 我当前的查询既小又简单,每个查询一次完成2-3个任务(有时只有1个)。之所以采用这种方法,是因为我对SQL完全陌生,并且发现与许多简单的查询一起使用并使用报告来合并数据比较容易,而与构建极其复杂的查询相对较容易,后者

    • 问题内容: 在我们当前的自动化中(使用Selenium / WebDriver / Java),我们使用 非常 广泛。例如: 根据定义,可以使用以下内容找到选择器:using,id,名称,className,css,tagName,linkText,partialLinkText和xpath。 最近,我们的前端开发人员提议我们实现一个以’test =’开头的新属性类。我认为这是一个好主意,因为我们

    • 我目前正在做一个使用Django API服务器和运行React的NodeJS服务器的项目。在开发中,我们在8000端口上运行Django,在8080端口上运行NodeJS,目前React负责渲染页面并与Django API交互,Django API为React提供数据。为了让React调用Django API,我们在Django中启用了CORS,因为它们位于不同的端口上。 我的问题如下: > 允许