通过模型方法上的装饰器发出 Django 信号?

2024-02-22

我正在尝试做类似的事情这些建议的信号装饰器 http://code.djangoproject.com/ticket/9015。除了拥有一个将装饰方法连接到信号的装饰器(将信号的发送者作为装饰器的参数)之外,我还想在类方法上使用装饰器。

我想像这样使用装饰器:

class ModelA(Model):

    @connect.post_save(ModelB)
    @classmethod
    def observe_model_b_saved(cls, sender, instance, created, **kwargs):
        # do some stuff
        pass

装饰器是:

from django.db.models import signals
def post_save(sender):
    def decorator(view):
        signals.post_save.connect(sender=sender, receiver=view)
        return view
    return decorator

当我这样做时得到的错误是:



File "/Library/Python/2.6/site-packages//lib/python2.6/site-packages/django/dispatch/dispatcher.py", line 78, in connect
AssertionError: Signal receivers must be callable.
  

我想问题是@classmethod返回一个不可调用的类方法对象。我真的不明白怎么办classmethod在幕后工作,但我推测这个参考页 http://docs.python.org/reference/datamodel.html在从类访问类方法对象之前,类方法对象不会转换为可调用对象,例如,ModelA.observe_model_b_saved。有什么方法可以(1)将我的方法定义为模型上的类或实例方法,(2)直接在方法定义上使用装饰器将其连接到信号?谢谢!


你能把它改为@staticmethod吗?这样,您只需交换装饰器的顺序即可。

class ModelA(Model):

    @staticmethod
    @connect.post_save(ModelB)
    def observe_model_b_saved(sender, instance, created, **kwargs):
        # do some stuff
        pass

您必须通过全名引用该类,而不是传递 cls 参数,但这将允许您保持类似的代码组织。

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

通过模型方法上的装饰器发出 Django 信号? 的相关文章

  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • 检查 Python 中的可迭代对象中的所有元素的谓词是否计算为 true

    我很确定有一个常见的习语 但我无法通过谷歌搜索找到它 这是我想做的 用Java Applies the predicate to all elements of the iterable and returns true if all ev
  • 删除 Django 1.7 中的应用程序(和关联的数据库表)

    是否可以使用 Django 1 7 迁移来完全删除 卸载应用程序及其所有跟踪 主要是其所有数据库表 如果没有 在 Django 1 7 中执行此操作的适当方法是什么 python manage py migrate
  • 如何在Python中同时运行两只乌龟?

    我试图让两只乌龟一起移动 而不是一只接着另一只移动 例如 a turtle Turtle b turtle Turtle a forward 100 b forward 100 但这只能让他们一前一后地移动 有没有办法让它们同时移动 有没有
  • 工作日重新订购 Pandas 系列

    使用 Pandas 我提取了一个 CSV 文件 然后创建了一系列数据来找出一周中哪几天崩溃最多 crashes by day bc DAY OF WEEK value counts 然后我将其绘制出来 但当然它按照与该系列相同的排名顺序绘制
  • 在没有模型的情况下将自定义页面添加到 django admin

    我正在尝试在没有模型关联的情况下向管理员添加自定义页面 这就是我迄今为止所取得的成就 class MyCustomAdmin AdminSite def get urls self from django conf urls import
  • 在 Django OAuth Toolkit 中安全创建新应用程序

    如何将 IsAdminUser 权限添加到 Django OAuth Toolkit 中的 o applications 视图 REST FRAMEWORK DEFAULT PERMISSION CLASSES rest framework
  • Gspread如何复制sheet

    在 Stackoverflow 上进行谷歌搜索和搜索后 我想我找不到有关如何复制现有工作表 现有模板工作表 并将其保存到另一个工作表中的指南 根据文档 有重复表 https gspread readthedocs io en latest
  • 在 Windows 上使用 apache mod_wsgi 运行 Flask 应用程序时导入冲突

    我允许您询问我在 Windows 上使用您的 mod wsgi portage 托管 Flask 应用程序时遇到的问题 我有两个烧瓶应用程序 由于导入冲突 只有一个可以同时存在 IE 如果请求申请 1 我有回复 然后 如果我请求应用程序 2
  • ANTLR 获取并拆分词法分析器内容

    首先 对我的英语感到抱歉 我还在学习 我为我的框架编写 Python 模块 用于解析 CSS 文件 我尝试了 regex ply python 词法分析器和解析器 但我发现自己在 ANTLR 中 第一次尝试 我需要解析 CSS 文件中的注释
  • 使用“默认”环境变量启动新的子进程

    我正在编写一个构建脚本来解析依赖的共享库 及其共享库等 这些共享库在正常情况下是不存在的PATH环境变量 为了使构建过程正常工作 让编译器找到这些库 PATH已更改为包含这些库的目录 构建过程是这样的 加载器脚本 更改 PATH gt 基于
  • 返回表示每组内最大值的索引的一系列数字位置

    考虑一下这个系列 np random seed 3 1415 s pd Series np random rand 100 pd MultiIndex from product list ABDCE list abcde One Two T
  • 将seaborn.palplot轴添加到现有图形中以可视化不同调色板

    将seaborn人物添加到子图中是usually https seaborn pydata org examples cubehelix palette html创建图形时通过传递 ax 来完成 例如 sns kdeplot x y cma
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • SocketIO + Flask 检测断开连接

    我在这里有一个不同的问题 但意识到它可以简化为 如何检测客户端何时从页面断开连接 关闭其页面或单击链接 换句话说 套接字连接关闭 我想制作一个带有更新用户列表的聊天应用程序 并且我在 Python 上使用 Flask 当用户连接时 浏览器发
  • 使用 Django 在 Google 地图上放置标记

    我正在尝试使用 API 和 HTML5 地理位置根据 Google 地图上模型中存储的纬度和经度放置标记 问题是如何使用模板关键字循环遍历 JavaScript 标签中存储的每个对象的经纬度信息 我不认为这可以在 Django 中完成 我在
  • 如何与其他用户一起使用 pyenv?

    如何与其他用户一起使用 pyenv 例如 如果我在用户 test 的环境中安装了 pyenv 则当我以 test 身份登录时可以使用 pyenv 但是 当我以其他用户 例如 root 身份登录时如何使用 pyenv 即使你这么做了 我也会s
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • 如何根据第一列创建新列,同时考虑Python Pandas中字母和列表的大小? [复制]

    这个问题在这里已经有答案了 我在 Python Pandas 中有 DataFrame 如下所示 col1 John Simon prd agc Ann White BeN and Ann bad list Ben Wayne 我需要这样做
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que

随机推荐

  • 对矩阵中的列值进行采样,无需替换

    我有一些 R 经验 但总是很难编写新代码 我在处理当前项目时发现了一些非常有用的帖子 但似乎找不到下一步 这是我到目前为止所做的 导入 20x20 csv 的排名 每列包含从 1 到 20 的每个整数的一个实例 因此所有 colSum 均为
  • Android 正则表达式模式 Incode UTF-8

    我正在 android 中尝试使用 matcher group 1 捕获 代码 String html doc html toString Pattern p Pattern compile is caption is is is Patt
  • 使用某些纸/芯元件时 dartium 中的警告

    我正在尝试使用 paper tabs paper tab 和 core pages 元素 但 dartium 显示了一堆警告 例如 from html5lib Unexpected non space characters Expected
  • 如何修复防伪令牌适用于用户“”,但当前用户是“xxxx”错误

    提供的防伪令牌适用于用户 但当前用户是 xxxx 我已经遵循了所有可能的解决方案来消除此错误 但没有成功 这是场景 我在浏览器选项卡 A 选项卡 B 中打开了 2 个单独的登录选项卡 1 我在选项卡 A 中登录我的网站 2 然后尝试登录Ta
  • VSTS 发布拉取请求构建触发器

    我的团队正在使用 VSTS 构建和发布机制 结合拉取请求分支安全设置 以便只有在拉取请求完成后才能合并代码 不过 我们遇到了一些奇怪的事情 因为当创建拉取请求 并且生成构建来证明提交 时 由拉取请求触发的此构建的完成也会间接触发发布 因为我
  • 检测 Silverlight 中的 DataContext 更改

    我有一个由多个部分组成的问题 1 Silverlight 不公开 DataContextChanged 事件是否有充分的理由 如果微软的某个人做出改变 似乎可以避免很多麻烦internal to public在 FrameworkEleme
  • C++ 右值引用和移动语义

    C 03 存在可能隐式发生不必要的副本的问题 为此 C 11引入了rvalue references and move semantics 现在我的问题是 这种不必要的复制问题是否也存在于 C 和 java 等语言中 或者只是 C 的问题
  • 当测试用例通过或失败时发送电子邮件警报

    我想在测试执行结果通过或失败或在测试管理器上执行时的任何其他状态时向用户发送电子邮件警报 我知道测试管理器无法做到这一点 但 TFS 可以 我已经尝试了各种查询组合来设置相同的警报 我想为自动化测试用例执行此操作 我将创建的构建不会发生太大
  • 打开 RewriteEngine 会产生 403 错误——如何打开 FollowSymLinks?

    我正在 OSX 上使用内置的 Apache2 我将文档根目录移动到桌面上的一个文件夹中 并确保 www and everyone具有读取权限 它工作得很好 很棒 PHP 工作 一切工作正常 直到我添加一个 htaccess仅此行 Rewri
  • 将简单的 JSON 对象转换为属性文件

    我有一个简单的 JSON 对象 想将其转换为 bash 中的属性文件 Input foo bar abc def ghi 预期输出 foo bar abc def ghi 您可以使用to entries为了那个原因 jq r to entr
  • 在 C++ 中捕获 Python 异常

    我正在开发一个服务器 客户端应用程序 其中客户端调用服务器的 API 该 API 为用户输入提供 Python 接口 这意味着客户端接口和服务器接口是用Python编写的 而套接字代码是用C 编写的 在服务器端 我有一堂课 Test 在 C
  • 检查数组是否为空似乎不起作用

    简单数组和简单检查是否是数组或对象 但是当没有数组数据而不是显示时页面崩溃No 这是数组 url get curl content tx https example com arr json decode url true if is ar
  • 显示/隐藏 ImageView 可见性时 Android 应用程序崩溃

    我一直在尝试创建我的第一个 Android 应用程序 是的 遇到了应用程序崩溃 我的片段 主 中有两个 ImageView 在相对布局中将 imageview 1 与 imageview2 重叠 我想做的是 如果有互联网连接 应该会显示 i
  • 电子 v10.1.1 给出未捕获的类型错误:无法读取未定义的属性“对话框”,但相同的代码可以在电子 v9.3.0 中使用

    I am trying to upload a file in an electron app which works perfectly for electron v9 3 0 but as soon as I use electron
  • Swift 使用 NSFetchedResultsController 和 UISearchBarDelegate

    我正在寻找解决这个问题的好方法 我想在我拥有的 TableView 上实现一些简单的搜索功能 我发现的所有示例都使用已弃用的UISearchDisplayController或使用新的UISearchController但没有NSFetch
  • 如何在mongo中高效地通过查询删除文档?

    我有一个查询 它选择要删除的文档 现在 我手动删除它们 如下所示 使用 python for id in mycoll find query fields mycoll remove id 这似乎效率不高 有没有更好的办法 EDIT 好吧
  • 从不同路径访问 PHP 会话变量

    我在 PHP 会话中遇到一个非常奇怪的问题 事实如下 创建会话变量代码 mydomain a b c create session php 读取会话变量 read mydomain a b c read session php 问题 当我从
  • PHP - 设置/模拟假日期

    我有一个有点奇怪的问题 是否可以在 PHP 中设置脚本运行时间的假日期 我使用的API使用时间段 例如当您发送请求获取一些数据时 您可以指定时间段 例如一个月 但这些时间段是固定的 它会返回从request time 1month到requ
  • C#中空字符串的sizeof

    在Java中 一个空字符串是40个字节 在Python 中它是20 个字节 C 中的空字符串对象有多大 我不能做sizeof 而且我不知道还能怎样找到答案 谢谢 是18字节 http www codeproject com KB dotne
  • 通过模型方法上的装饰器发出 Django 信号?

    我正在尝试做类似的事情这些建议的信号装饰器 http code djangoproject com ticket 9015 除了拥有一个将装饰方法连接到信号的装饰器 将信号的发送者作为装饰器的参数 之外 我还想在类方法上使用装饰器 我想像这