Django:在信号中获取 m2m 相关对象

2023-12-09

我有点想看到类似的问题(Django 从 post_save 信号访问 ManyToMany 字段),但仍然没有看到如何获取更新的相关对象列表。

例如。我有以下型号

class User(models.Model):
    username = models.CharField

class Blog(models.Model):
    user = models.ManyToManyField('User')

现在我通过 django admin 将用户添加到给定的博客。

所以我希望下面的信号将打印所有新用户(我刚刚添加的)...但是...我一直得到旧列表:(

@receiver(m2m_changed, sender=Blog.users.through)
def blog_users_change(sender, instance, **kwargs):
     print instance.users.all()

最后一行给出了旧的用户列表instance.users.all()。例如。此处添加的用户不会反映出来。


m2m_changed信号在保存/更新过程的几个阶段被触发,并且有一个action提供给信号处理程序的参数,告诉您它处于哪个阶段。从文档:

action

指示对关系进行的更新类型的字符串。这可以是以下之一:

“预添加”在将一个或多个对象添加到关系之前发送。

“后添加”将一个或多个对象添加到关系后发送。

“预删除”在从关系中删除一个或多个对象之前发送。

“删除后”从关系中删除一个或多个对象后发送。

“预清除”在关系清除之前发送。

“post_clear”关系清除后发送。

如果你抓住了pre_remove行动然后你会得到所有的对象before有些已从关系中删除。这就是为什么您看到的用户列表显然没有变化。

您的代码需要检查action在决定做什么之前。例如:

@receiver(m2m_changed, sender=Blog.users.through)
def blog_users_change(sender, instance, action, **kwargs):
    if action == 'pre_remove':
         # This will give you the users BEFORE any removals have happened
         print instance.users.all()
    elif action == 'post_remove':
         # This will give you the users AFTER any removals have happened
         print instance.users.all()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django:在信号中获取 m2m 相关对象 的相关文章

随机推荐

  • 从 NTFS-MFT 参考号获取文件信息

    在我的 C 应用程序中 我已经有一种方法来检查文件系统 但我想利用从主文件表 MFT 中读取数据的优势 因为它的速度要快得多 我了解 1 它是专有规范 因此如有更改 恕不另行通知 2 仅当应用程序在管理权限下运行时才能访问它 我设法通过读取
  • 在 xpath/domdocument 查询中查找与给定字符串匹配的链接

    使用 Xpath 和 domDocument 获取与给定单词匹配的链接进行显示时遇到问题 一切似乎都进展顺利for i 0 i lt documentLinks gt length i 用来 谁能帮我解决我哪里出错了 html ol htm
  • 更新预填充数据库

    我为 Android 设备创建了一个问答游戏 我有一个数据库 在资产文件夹和 dbHelper 类中存在问题 一切正常 但现在我想修复一些拼写错误并添加更多问题 我需要更新数据库 但我不知道该怎么做 我在互联网上找到了这个 dbHelper
  • 单击事件在具有触摸事件的 iPad 上不起作用

    我正在页面链接上使用点击事件 在 iPad 上运行良好Safari 但是当我在同一页面上使用触摸事件时 单击事件将停止工作 iPad 上只有触摸事件有效 点击事件 link onclick onLinkClick 触摸事件 sdiv bin
  • 为什么 Application.Speech.Speak 单独读取一些数字而不是将它们放在一起?

    假设现在是 11 点 11 分 它读作 一一 小时 十一 分钟 如下所示 Sub TEST1 Application Speech Speak It is Hour Now hours and Minute Now minutes End
  • UnicodeWarning:Unicode 相等比较无法将两个参数转换为 Unicode

    我知道很多人以前遇到过这个错误 但我找不到解决我的问题的方法 我有一个想要规范化的 URL url u http www dgzfp de Dienste Fachbeitr C3 A4ge aspx EntryId 267 Page 5
  • 与 CSS 并排的列内的元素保持相同的高度

    我有一个这样的模板 我想在两列的每一项之间保持相同的高度 具体取决于高度最大的一项 但前提是它们并排时 在较小的屏幕中 当它们的 width 100 时 每个 div 都有自己的高度 具体取决于其自己的内容高度 它应该看起来像这样 我认为我
  • 为什么 git 对标记为二进制的文件发出 CRLF 警告?

    我有一个已标记为二进制的文件 cat gitattributes dist binary git check attr a dist app js dist app js binary set dist app js diff unset
  • 程序崩溃时如何释放资源

    我有一个使用其他人的服务的程序 如果程序崩溃 关闭这些服务的最佳方法是什么 在服务器端 我将定义一些检查器来定期监视客户端是否无效 但是我们可以在客户端做任何事情吗 我不确定正常的 RAII 在这种情况下是否仍然有效 我的代码是用 C 和
  • Http Api 调用承诺的响应未定义 - Angular 2

    我在 WebAPI 中创建了一个 api 如下所示 public HttpResponseMessage Get var response Request CreateResponse HttpStatusCode OK response
  • 在弹出窗口中显示地图 v2 在 Android 中不显示?

    我想打开弹出窗口 我使用地图 v2 在弹出窗口中显示地图 v2 但不显示 在这里我放置了我的 xml 布局和活动类 main xml
  • 如何在 CUDA 中使用 2D 数组?

    如何分配大小为 MXN 的二维数组 那么如何在 CUDA 中遍历该数组呢 global void test int A BLOCK SIZE BLOCK SIZE int B BLOCK SIZE BLOCK SIZE int C BLOC
  • R中的正则表达式删除字符串最后一个空格之后的部分

    我想要一个gsubR 中的表达式用于删除字符串中最后一个空格之后出现的所有内容 例如 string Da Silva UF 应该归还我 Da Silva 有什么想法吗 Using anchor gt string Da Silva UF g
  • GL_TRIANGLES 有效,但 GL_QUADS 不显示任何内容

    所以我从一个程序切换到另一个程序 我不明白为什么 但 GL QUADS 将不再显示相同的代码 为了尝试找出为什么旧代码不起作用 我编写了这个新的简单代码 但它仍然不起作用 设置 vector
  • Windows 上的 xlwings 和 python 3.5

    我已经被困了一段时间了 我的配置是 python 3 5 xlwings 0 5 0 and Windows 7 我在尝试时得到以下回溯import xlwings Traceback most recent call last File
  • NASM 一次打印一个字符

    为什么这个程序没有打印到屏幕上 我是否遗漏了 INT 80 命令中的某些内容 section bss section data hello db Hello World 0xa 10 is EOL section text global s
  • Android:如何在某些活动上隐藏 ActionBar

    我开发了一个简单的演示应用程序 其中包含启动屏幕 地图和一些常规屏幕 我的顶部有一个包含徽标的操作栏 在我的手机 Galaxy s1 I9000 V2 3 上一切看起来都很好 但是当我在 Galaxy s2 v4 上测试它时 操作栏也出现在
  • Unity 纸板方向横向颠倒

    您好 我有一个 Unity 应用程序 它使用 google Cardboard SDK 来启用立体视图 因此我将有一个支持 VR 的应用程序 我的应用程序运行得很好 但是 如果我将播放器设置方向设置为自动方向 并且只允许向左横向和向右横向
  • C 中一元加 (+) 运算符的用途是什么?

    在 C 语言中 这样写是合法的 int foo 4 然而 据我所知 一元加 in 4是一个空操作 是吗 您可以将其用作表达式具有算术类型的一种断言 define CHECK ARITHMETIC x x 如果出现以下情况 这将生成编译时错误
  • Django:在信号中获取 m2m 相关对象

    我有点想看到类似的问题 Django 从 post save 信号访问 ManyToMany 字段 但仍然没有看到如何获取更新的相关对象列表 例如 我有以下型号 class User models Model username models