Django,在模型中按函数过滤 Q 对象

2024-03-20

在我的 Profile 模型中,我有以下功能:

它用于返回用户的全名(如果某些数据丢失,则返回用户的全名)。

    def full_name(self):
      first_name = self.user.first_name.strip()
      if first_name and self.user.last_name:
          if not self.middle_name:
              full_name = u'%s %s' % (first_name, self.user.last_name)
          else:
              full_name = u'%s %s %s' % (first_name, self.middle_name,
                                       self.user.last_name)
          return full_name.strip()
      elif first_name:
          return first_name
      return self.user.username

现在我的问题:我有一个视图,在其中根据变量“q”(从模板中的搜索框返回)过滤查询集 就像这样:

qs = qs.filter(tenant_demo_purchase=True).order_by('-id')
    #Search users within results
    q = self.request.GET.get('q', None)
    if q:
        qs = qs.filter(Q(user__username__icontains=q) |
                       Q(user__first_name__icontains=q) |
                       Q(user__last_name__icontains=q) |
                       Q(arrangement_period__arrangement__title__icontains=q)  | 
                       ).filter(tenant_demo_purchase=True).order_by('-id')
    else:
        pass
    return qs

如果我给它一个名字、用户名或姓氏,这个过滤器就可以正常工作。但如果我给它一个名字+姓氏(例如:“John Doe”),它不会返回任何结果。

我的大多数用户倾向于提交全名,因此作为解决方案,我尝试让它访问 Profile.full_name 函数。通过添加以下行

Q(user__profile__fullname__icontains=q) 

但是,这会崩溃并显示以下错误消息:

raise FieldError('Related Field got invalid lookup: {}'.format(lookups[0]))
FieldError: Related Field got invalid lookup: fullname

Interistengly,当我查看 django 错误页面时,它似乎忽略了用户名并在“arrangement__title”查询上失败,忽略了其余部分:

 Q(arrangement_period__arrangement__title__icontains=q)

我尝试做显而易见的事情:

Q(user__profile.fullname__icontains=q) 

但这只会引发以下错误

SyntaxError: keyword can't be an expression

我只是想要一种方法让用户输入全名(名字+空格+姓氏)并且仍然让程序返回正确的结果。

有谁知道有什么方法可以做到这一点?

Solution

感谢 Ivan 他的回答,以下代码提供了所需的结果:

q = self.request.GET.get('q', None)
    if q:
        qs = qs.annotate(
            full_name=Concat(
                'user__first_name',
                Value(' '),
                'user__last_name',
                output_field=CharField()
            )
        ).filter(Q(full_name__icontains=q) |
                 Q(user__username__icontains=q) |
                 Q(user__first_name__icontains=q) |
                 Q(user__last_name__icontains=q) |
                 Q(arrangement_period__arrangement__title__icontains=q)
                 ).order_by('-id')

尝试使用数据库函数 concat:

from django.db.models import CharField, Value
from django.db.models.functions import Concat


qs = qs.annotate(
    full_name=Concat(
        'user__first_name',
        Value(' '),
        'user__last_name',
        output_field=CharField()
    )
).filter(full_name__icontains=q)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django,在模型中按函数过滤 Q 对象 的相关文章

  • solr + haystack + django 我在哪里放置 schema.xml?

    我刚刚安装Solr and Haystack for a Django我正在做的项目 下列的this http docs haystacksearch org dev tutorial html Haystack教程 我创建了一个 sche
  • django-tastypie:无法访问脱水中的bundle.request(self,bundle)

    我发现有人有同样的问题 但他的安慰对我不起作用 看Django Tastypie 如何访问 Bundle 中的 Http request 对象 https stackoverflow com questions 7389632 我正在尝试应
  • Django - 渲染到字符串无法加载 CSS

    我正在尝试使用 Django 1 8 render to string 通过管理命令将 html 转换为 pdf 而不是使用 View request 以下代码可以将模板转换为 pdf 但它无法将 CSS 加载到模板中 def html t
  • Django 跨反向关系聚合

    鉴于这两个模型 class Profile models Model user models ForeignKey User unique True verbose name user about models TextField abou
  • 如何防止灯具与 django post_save 信号代码冲突?

    在我的应用程序中 我想在新用户注册时在某些表中创建条目 例如 我想创建一个用户配置文件 然后该配置文件将引用他们的公司和他们的一些其他记录 我用 post save 信号实现了这一点 def callback create profile
  • Django - 找不到静态文件

    我看过有关此问题的几个帖子 但没有找到我的解决方案 我正在尝试在 Django 1 3 开发环境中提供静态文件 这是我的设置 STATIC ROOT home glide Documents django cbox static STATI
  • 如何向 Django 管理添加报告部分?

    我想在 Django 管理中实现一个报告部分 这意味着在管理主页中添加一个自定义部分 我将看到报告列表 而不是模型列表 我想使用 Django 的管理表 其中包括过滤器 排序以及所有可能的功能 实现这一目标的 最佳 方法是什么 我意识到这是
  • Django excel save_book_to_database() 在使用 Django 1.8 的最新版本中损坏

    我一直在使用 Django 1 8 浏览 django excel 文档 但无法获得save book to database 上班 它要么默默地失败 要么给出以下错误 tuple object has no attribute meta
  • 对(静态)CSS 文件所做的更改未反映在 Django 开发服务器中

    我正在使用 Django 制作一个 Web 应用程序 但在将 CSS 文件 存储在我的应用程序的静态目录中 中所做的更改反映到开发服务器上时遇到了一些问题 需要明确的是 服务器能够访问静态文件 但是 它目前停留在我的 CSS 文件的旧版本上
  • 使用 Python 或 Django 处理收到的电子邮件?

    我了解如何通过 Django 发送电子邮件 但我希望用户能够回复电子邮件 如果他们发送 以及我收到 的电子邮件包含与某个字符串匹配的消息 我将调用一个函数 我已经做了一些谷歌搜索 但除了自己制作脚本之外似乎没有什么好的解决方案 如果有什么东
  • 表单提交后 Django 重定向不起作用

    Django 新手 所以这个可能有一个非常简单的答案 但我一生都找不到具体的解决方案 我只是想在使用 FileField 提交表单后重定向到新的 URL 我可以单独导航到该 URL 效果很好 文件上传正确 因此我知道它已正确验证 但重定向返
  • 无法编辑,但可以在 Django 管理中添加新的内联

    这是我的模型 class Note note models TextField null False blank False editable True user models ForeignKey to User null True bl
  • 如何在 Django 测试服务器中防止 HTTP 304

    我在 Django 中有几个项目 并且时不时地在一个和另一个之间交替 它们都有一个 media 路径 由django views static serve 并且他们都有一个 media css base css file 问题是 每当我运行
  • Django重复输入错误(1062)的原因?

    我更新了下面的信息以引用给我相同错误的不同模型 视图 它是一个更简单的模型 因此需要考虑的变量更少 我有以下模型 class Imaging order Order order description models ForeignKey I
  • 将 Django 部署到 AWS;傻瓜静态文件

    我对这个项目的最后一步完全迷失了 到目前为止 我已经能够开发一个 Django 应用程序 它可以在本地主机上按照我想要的方式工作 我已经能够将网站部署到 AWS EC2 但我一定错过了有关提供静态文件的一些基本知识 我什至还没有尝试过媒体文
  • 如何检索分配给 Django 中的组的所有权限

    我正在执行一项任务来检索分配给 Django 中的组的一组权限 我可以使用以下代码获取创建的组 但无法使用它来获取分配给它们的权限 from django contrib auth models import Group Permissio
  • Django 查询:“datetime + delta”作为表达式

    好吧 我的问题如下 假设我有下一个模型 这是一个简单的情况 class Period models Model name CharField field specs here start date DateTimeField field s
  • django 中的身份验证方法返回 None

    你好 我在 django 中做了一个简单的注册和登录页面 当想要登录时 登录视图中的身份验证方法不返回任何内容 我的身份验证应用程序 模型 py from django db import models from django contri
  • 如何在 Django 中将 pdf 作为电子邮件附件发送

    您好 我正在使用以下 2 个函数来创建并通过邮件即时发送 pdf 我究竟做错了什么 导出pdf功能在浏览器中显示时可以正常工作 我得到的错误是 类型错误 ContentFile 对象不支持索引 我做错了什么 几乎所有这些代码都来自一些博客
  • 如何正确自定义 Django LoginView

    我试图弄清楚如何根据用户当天是否第一次登录来自定义 django LoginView 我当前已设置 LoginView 使其默认为 settings py 文件中的 LOGIN REDIRECT URL book author 这工作完美无

随机推荐

  • mysql批量插入文本文件

    我有纯文本文件 我想将该文本文件的内容逐行移动到 mysql 表中 任何人都可以帮助我 因为它不是 csv 文件 我怎样才能实现这一目标 我设计我的数据库如下 RowID int 11 NO PRI auto increment Text
  • 如何获取 Symfony2 中控制器的所有路由列表?

    我有一个控制器 它实现了所有路线 URL 我的想法是为所有帮助页面提供通用索引 有没有办法获取控制器 从控制器内 定义的所有路由Symfony2 您可以做的是将 cmd 与 最高 SF2 6 一起使用 php app console rou
  • Python在3D散点图中用线连接相邻点

    我有两组 x y z 坐标 我用 Matplotlib 将它们绘制在 3D 散点图中 现在 我想将每个生成的四边形与平面连接起来 我已经了解了如何在 3D 空间中绘制 2D 多边形在 python matplotlib 中绘制 3D 多边形
  • NLog - 将 NULL 写入可选数据库列

    我在用NLog http nlog project org用于登录 ASP Net 应用程序并通过 Microsoft Sql Server 使用数据库目标 我有一些可选的日志记录参数 但并不总是指定 但是 我希望在未提供这些内容时将其写为
  • 在 SwiftUI macOS 的帮助菜单下添加应用程序帮助

    如果您打开任何应用程序 它的顶部都有菜单栏项目 最后一个是帮助 当我现在运行适用于 macOS 的 SwiftUI 应用程序并按菜单上的帮助 然后按 应用程序名称 帮助 时 它只是说 帮助不适用于 应用程序名称 我如何添加对此的支持 在找到
  • Admob 如何确定文本上下文来显示有针对性的广告?

    1 Admob SDK是否能够检索应用程序中显示的所有文本字符串并根据这些文本字符串显示有针对性的广告 2 我是否必须手动指定字符串AdRequest setKeywords keywords EDIT setKeywords被忽略 Sou
  • spring mvc 为所有控制器提供一个初始化绑定器

    我有 5 个控制器 我想注册一个InitBinder对他们所有人 我知道我可以将此代码添加到每个代码中 InitBinder public void initBinder WebDataBinder binder binder regist
  • Jquery:获取页面的所有html源但排除一些#ids

    我正在尝试使用 html 或 contents 但我有奇怪的行为 我基本上需要获取页面的整个 dom 排除一些元素 例如 first second 并将其作为字符串传递 不再是 dom 是否可以 您可以克隆它 删除要从克隆中排除的元素 然后
  • Jetpack compose 的公开下拉菜单

    我想知道是否有针对 jetpack compose 的暴露下拉菜单的解决方案 我在 jetpack compose 中找不到该组件的正确解决方案 有什么帮助吗 The M2 从版本开始1 1 0 alpha06 https develope
  • 我可以在 Django 中使用 HTTP 基本身份验证吗?

    我们有一个在 Apache 上运行的网站 访问该网站有许多通过 HTTP 基本身份验证保护的静态页面 我使用 Django 内置的用户管理支持 用 Django 编写了网站的新部分 我遇到的问题是用户必须通过 HTTP Basic 身份验证
  • 如何使用 cURL 和 PHP 来欺骗引荐来源网址?

    我正在尝试使用 PHP 学习 cURL 来欺骗网站的引荐来源网址 我希望通过以下脚本来完成此任务 但它似乎不起作用 有什么想法 建议我哪里出错了 或者你知道有什么教程可以帮助我解决这个问题吗 Thanks Jessica
  • junit 测试用例生成器

    有没有一个好的工具可以根据一些原始模板自动生成 jUnit 测试用例 这样一来 没有太多 Java 或 jUnit 背景的工程师就可以编写测试用例 作为背景信息 这是用于黑盒测试 如果除了使用 jUnit 之外还有其他替代方法来运行回归测试
  • 在 Jenkins 管道中执行 gcloud 命令

    我尝试在 Jenkins 声明性管道中运行 gcloud 命令 如下例所示 pipeline agent any stages stage Run gcloud version steps sh gcloud version 我下载了 GC
  • Eclipse“增强类反编译器”插件调试时不反编译

    问题描述 查看类 即 Ctrl Shift T 时反编译工作正常 但从调试角度单步执行代码时则不然 而是打开 类文件查看器 使用的版本 Eclipse Oxygen 和增强型类反编译器 3 0 0 这也适用于氧气和更高版本 单击 窗口 gt
  • 在 ExtJS 网格中编辑整行后触发“afteredit”?

    我有一个 ExtJS 编辑器网格 里面有一些列 我想修改记录上的数据并将数据自动保存到数据库 但我只需要在完成编辑当前行的所有单元格后保存数据 我使用了 afteredit 事件 但它在一个单元格更改后立即触发了该事件 在完成所有单元格的修
  • 如何在 IndexPath 处使用 reloadRows 更新行

    我正在尝试使用按钮删除单元格 这是一个单元格的实现 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndexPath indexPath st
  • Mac OS 10.14 Mojave + qt5.5 + gem capybara-webkit

    我的配置是 MAC Mojave v10 14 我尝试安装需要 qt5 5 的 gem Capybara webkit v 1 15 0 但 qt5 5 已从自制程序中删除 并且与 Xcode v10 不兼容 我试试这个 卸载 Xcode
  • 在 Android 中的 doinbackground() 中执行 UI 任务

    有没有办法在 AsyncTask 的 doinbackground 中执行 UI 任务 我很清楚最好在 onPostExecute 方法中执行此操作 但就我而言 由于我需要使用可重复使用的警报 因此能够访问我的 doinbackground
  • 查找 jQuery 中所有未选中的复选框

    我有一个复选框列表
  • Django,在模型中按函数过滤 Q 对象

    在我的 Profile 模型中 我有以下功能 它用于返回用户的全名 如果某些数据丢失 则返回用户的全名 def full name self first name self user first name strip if first na