当前位置: 首页 > 面试题库 >

在Django中,如何使用动态字段查找过滤QuerySet?

司空镜
2023-03-14
问题内容

给定一堂课:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=20)

是否有可能(如果有的话)拥有一个基于动态参数进行过滤的QuerySet?例如:

 # Instead of:
 Person.objects.filter(name__startswith='B')
 # ... and:
 Person.objects.filter(name__endswith='B')

 # ... is there some way, given:
 filter_by = '{0}__{1}'.format('name', 'startswith')
 filter_value = 'B'

 # ... that you can run the equivalent of this?
 Person.objects.filter(filter_by=filter_value)
 # ... which will throw an exception, since `filter_by` is not
 # an attribute of `Person`.

问题答案:

Python的参数扩展可用于解决此问题:

kwargs = {
    '{0}__{1}'.format('name', 'startswith'): 'A',
    '{0}__{1}'.format('name', 'endswith'): 'Z'
}

Person.objects.filter(**kwargs)

这是一个非常常见且有用的Python习惯用法。



 类似资料:
  • 问题内容: 从一个示例中,您可以看到一个多重或查询过滤器: 例如,这导致: 但是,我想从列表中创建此查询过滤器。怎么做? 例如 问题答案: 你可以按以下方式链接查询:

  • 问题内容: 我敢肯定这是一个微不足道的操作,但是我不知道它是如何完成的。 肯定有比这更聪明的东西: 我正在寻找将它们全部添加到一个查询中,例如: 如何使用值列表过滤Django查询? 问题答案: 从Django文档中:

  • 问题内容: 我有以下模型: 我想在管理员中添加时过滤字段,如下所示: 我已经尝试了很多东西,但是没有任何效果!我怎样才能做到这一点? 问题答案: 使用方法:

  • 问题内容: 我想要有关一个字段值的其他字段。为此,我构建了一个自定义管理表单以添加一些新字段。 与jacobian 1的博客文章相关,这是我想出的: 但是其他字段“ foo”不会显示在管理员中。如果我像这样添加字段,则所有工作都很好,但没有按要求动态化,以添加有关模型的另一个字段的值的字段 那么,有没有我必须再次触发以使新字段起作用的初始化方法?还是有其他尝试? 问题答案: 这是解决问题的方法。感

  • 问题内容: 我需要从Django模板中执行过滤查询,以获取与视图中的python代码等效的一组对象: 在我的模板中,我想做 但我似乎无法找出如何编写FILTER。 问题答案: 你不能这样做,这是设计使然。Django框架的作者打算将表示代码与数据逻辑严格分开。过滤模型是数据逻辑,而输出HTML是表示逻辑。 因此,你有几种选择。最简单的方法是进行过滤,然后将结果传递给。或者,你可以在模型中编写一个方

  • 问题内容: 我希望能够列出用户已添加的项目(他们被列为创建者)或已被批准的项目。 所以我基本上需要选择: 我将如何在Django中执行此操作?(最好使用过滤器或查询集)。 问题答案: 有些对象允许进行复杂的查找。例: