Django 信号 - kwargs['update_fields'] 在通过 django admin 进行模型更新时始终为 None

2023-12-19

我的 django 应用程序中有一个信号,我想检查模型中的某个字段是否已更新,以便我可以继续执行某些操作。

我的模型看起来像这样...

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.PositiveIntegerField()
    tax_rate = models.PositiveIntegerField()
    display_price = models.PositiveInteger()
    inputed_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL)
    updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL)

我的信号看起来像这样...

@receiver(post_save, sender=Product)
def update_model(sender, **kwargs):
    instance = kwargs['instance']
    if 'tax_rate' in kwargs['update_fields']:
        # do something

这会返回错误None不是一个可迭代的。我已阅读有关 django 信号文档update_fields它说The set of fields to update as passed to Model.save(), or None if update_fields wasn’t passed to save().

我应该提到,我在 django admin 内部工作,所以我希望发生的是,我可以在 django admin 中创建我的产品模型的实例,然后如果tax_rate 或 Price 的值更新,我可以检查这些并更新list_price因此。然而,kwargs['update_fields']始终返回 None。 我错了什么?或者有其他方法可以在 django admin 中实现该结果吗?

更新部分

现在,假设我引入一个名为inputed_by在我的产品模型中,它指向用户模型,我希望在首次保存模型时填充该字段。然后是另一个字段updated_by它存储最后更新模型的用户。同时我想检查是否有一个或两个tax_rate or price已经升级。

在我的模型管理中,我有以下方法......

def save_model(self, request, obj, form, change):
    update_fields = []
    if not obj.pk:
        obj.inputed_by = request.user
    elif change:
        obj.updated_by = request.user

        if form.initial['tax_rate'] != form.cleaned_data['tax_rate']:
            update_fields.append('tax_rate')
        if form.initial['price'] != form.cleaned_data['price']:
            update_fields.append('price')

    obj.save(update_fields=update_fields)
    super().save_model(request, obj, form, change)

我的信号现在看起来像这样......

@receiver(post_save, sender=Product, dispatch_uid="update_display_price")
def update_display_price(sender, **kwargs):
    created = kwargs['created']
    instance = kwargs['instance']
    updated = kwargs['update_fields']
    checklist = ['tax_rate', 'price']

    # Prints out the frozenset containing the updated fields and then below that `The update_fields is None`

    print(f'The update_fields is {updated}')

    if created:
        instance.display_price = instance.price+instance.tax_rate
        instance.save()
    elif set(checklist).issubset(updated):
        instance.display_price = instance.price+instance.tax_rate
        instance.save() 

我收到错误'NoneType' object is not iterable该错误似乎来自该行set(checklist).issubset(updated)。我尝试在 python shell 中专门运行该行,它产生了所需的结果。这次怎么了?


该组字段应传递给Model.save()使它们可用在update_fields.

像这样

model.save(update_fields=['tax_rate'])

如果你从 django admin 创建一些东西并且总是None代表着update_fields尚未传递给模型的save方法。正因为如此,它将永远是None.

如果你检查ModelAdmin类和save_model方法你会看到调用没有发生update_fields关键字参数。

如果你自己写的话它会起作用save_model.

下面的代码将解决您的问题:

class ProductAdmin(admin.ModelAdmin):
    ...
    def save_model(self, request, obj, form, change):
        update_fields = []

        # True if something changed in model
        # Note that change is False at the very first time
        if change: 
            if form.initial['tax_rate'] != form.cleaned_data['tax_rate']:
                update_fields.append('tax_rate')

        obj.save(update_fields=update_fields)

现在您将能够测试会员资格update_model.

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

Django 信号 - kwargs['update_fields'] 在通过 django admin 进行模型更新时始终为 None 的相关文章

  • gcloud.exceptions.Forbidden:403缺少或权限不足

    我是 Google Cloud Platform 的新手 我已经设置了一个 Google VM 实例 运行命令时 我在本地计算机上遇到身份验证问题 python manage py makemigrations 您能否建议一些提示 步骤来解
  • 如何在 Django 1.9.6 中创建超级用户帐户

    我正在读一本关于 Django 的书 Sanjeev Jaiswal 和 Ratan Kumar 所著的 学习 Django Web 开发 但这本书是基于 Django 的早期版本 1 9 版本之前 的 为了用表填充数据库 本书使用了syn
  • _启动服务器时 Django 中出现死锁错误

    我在启动 python 服务器时多次遇到此错误 当我更改任何文件并且服务器再次启动时也会发生这种情况 我尝试删除环境并重新创建环境 但仍然存在相同的错误 Python 3 5 2 默认 2018 年 11 月 12 日 13 43 14 G
  • 如何测试 Django CreateView?

    我想在 Django 上练习测试 并且我有一个要测试的 CreateView 该视图允许我创建一个新帖子 我想检查它是否可以找到没有发布日期的帖子 但首先我测试带有发布日期的帖子只是为了习惯语法 这就是我所拥有的 import dateti
  • 未设置 Docker-compose 环境变量

    项目树 backend env dev docker compose dev yml project 我有以下警告 docker compose f docker compose dev yml up build i am in the b
  • 如何使用 Django 的开发服务器提供收集的静态文件?

    我正在尝试让 Django 的开发服务器提供由 Django 收集的静态文件python manage py collectstatic命令 目前我失败了 我的 Django 设置文件声明了这一点 STATIC ROOT os path j
  • Django 中的多种用户类型

    我是 Django 新手 尝试创建一个具有两种用户类型 自由职业者和客户 的应用程序 我了解如何创建用户配置文件类 它对我来说效果很好 class UserProfile models Model user models OneToOneF
  • 在 Django 中 AJAX 发布后重定向

    我使用 Django 的内置 DeleteView 并为success url属性 现在在我的模板中 我通过 JQuery 的 post 方法触发此视图 当该项目被删除时 我不会被重定向到success url 经过一番查找 发现好像是AJ
  • 当客户端断开连接时,如何停止 django 中的 StreamingHttpResponse?

    我的 django 服务器以 jpeg 流的形式提供视频源 一次一帧 它看起来像这样 class VideoCamera def init self code def get frame self code return frame def
  • Django Rest Framework - 注册后返回身份验证令牌

    我想在用户注册成功后以 json 形式返回身份验证令牌 我怎样才能做到这一点 对于注册我使用以下 序列化器 py class UserSerializer ModelSerializer class Meta model User fiel
  • MySQL 连接器/python 在 django 中不工作

    我正在学习 Django 以 MySQL 作为后端 我安装了Oracle的mysql连接器来连接mysql 然而 当我跑步时python manage py我收到这个错误 回溯 最近一次调用最后一次 文件 C Python33 lib si
  • 姜戈。此函数的关键字参数无效。多对多

    我有这个错误 people 是该函数的无效关键字参数 class Passage models Model name models CharField max length 255 who models ForeignKey UserPro
  • django order_by FieldError异常无法被捕获

    from django core exceptions import FieldError This is a method of a class def order item list self item list order items
  • 如何修复 Django 应用程序的评论视图中的此错误?

    我正在尝试用 Django 开发一个应用程序 目前 我正在尝试创建一个评论部分 供用户使用表单撰写和提交评论 我制作了一个模板 显示电影的信息以及用户可以对电影发表评论的表单 问题是 当我编写评论并尝试提交时 会出现此错误 myapp2 2
  • Django - 403 Forbidden CSRF 验证失败

    我在 Django 中为我的网站提供了一个联系表单 当我在本地测试它时 它工作正常 但现在当我尝试 实时 提交我的联系表单时 它总是出现 403 禁止 CSRF 验证失败 view def contact request if reques
  • django在服务器上同步数据库时出错

    我有一个完整运行的区域设置 django 应用程序 但我在迁移到 site5 服务器时遇到了麻烦 当我启动 django 时syncdb命令 我所有模型的表都已创建 但是然后 我猜当它创建关系表时 我收到以下错误 mysql excepti
  • AWS Cognito 作为网站的 Django 身份验证后端

    我对 Cognito 的理解是 它可以用来代替本地 Django 管理数据库来对网站的用户进行身份验证 然而 我没有找到任何带有通过 Cognito 登录屏幕的基本 Hello World 应用程序的详细示例 如果有人可以发布一篇文章 逐步
  • 在 Django 1.7 中使用 html 发送电子邮件

    In 发送邮件 我们有一个新参数 html message Docs https docs djangoproject com en dev topics email send mail I have 电子邮件 html文件 我想发送我的消
  • Django MySQL 创建表时出错

    我有一个类似的问题这张票 https code djangoproject com ticket 18256在 Django 论坛上提出 我该如何解决这个问题 我还扩展了一个用户模型 如下所示 class Profile models Mo
  • Django ALLOWED_HOSTS 与 CORS(django-cors-headers)

    ALLOWED HOSTS 和 CORS 之间有什么区别 如果我定义了 ALLOWED HOSTS 我还需要定义 CORS 吗 我没有使用 django 模板 我也有可能动态定义这两个吗 我认为没有 我使用 django 作为后端 并在不同

随机推荐

  • 各个平台的保留文件名是什么?

    我不是在询问文件名的一般语法规则 我的意思是那些不知从哪里跳出来咬你的陷阱 例如 尝试在 Windows 上将文件命名为 COM From http www grouplogic com knowledge index cfm fuseac
  • iPhone 5 上的 Bootstrap 3 不是 XS

    我在制作 Bootstrap 3 网站时遇到了一个非常奇怪的错误 由于某种原因 它不适应较小的 iPhone 屏幕尺寸 导航栏没有折叠 并且 col xs 似乎被忽视 我仔细检查了 iPhone 上的屏幕宽度 320 像素 当我调整浏览器大
  • 如何在 Java GUI 中显示一行?

    我想在 Java swing 中的两个图像之间画一条线 我找到了不同的绘制线条的方法 但没有一种是我想要的方式 这让我想也许我只需要在我想要的地方插入一条线条的图像 无论如何 我想要类似的东西 O O O O 要显示在 O 是图像的位置 而
  • Javascript 登录系统检查 if ("UserPassword") == Undefined 不起作用

    所以基本上在一个 html 文件中 我有一个输入字段 其 id 为 UserPassword 在我的 js 文件中 我有一个函数 register 它会检查您是否已注册 如果没有 则检查这是否是您第一次登录 如果没有 则检查您输入的密码是否
  • Mongodb中的聚合查询返回特定字段

    文件样本 id ObjectId 53329dfgg43771e49538b4567 u id ObjectId 532a435gs4c771edb168c1bd7 n Salman khan e email protected cdn c
  • Owin SelfHost WebApi - 客户端在响应期间关闭连接会引发异常?

    我正在运行一个基于 Owin Selfhost 的 WebApi 其中我通过以下方式放入了 API 未处理的异常记录器 config Services Add typeof IExceptionLogger apiExceptionLogg
  • rake db:test:prepare 不创建所有表

    注意 使用 Rails 3 0 7 Postgresql 8 4 4 1 rake 0 8 7 尝试让 Rails 测试正常工作 命令 rake db test prepare 似乎工作正常 rake db test prepare t i
  • 如何在html中嵌入图像并通过msdb.dbo.sp_send_dbmail将html作为电子邮件发送?

    我可以使用 msdb dbo sp send dbmail 以 html 格式发送电子邮件 仅就格式而言 它对于文本来说非常好 例如 EXEC msdb dbo sp send dbmail recipients p recipients
  • 使用不同的编码和库解析 CSV 文件

    尽管有很多关于该主题的线程 但我在解析 CSV 时遇到了麻烦 它是从 Adwords 关键字规划器下载的 csv 文件 以前 Adwords 可以选择将数据导出为 纯 CSV 可以使用 Ruby CSV 库进行解析 现在可以选择 Adwor
  • 是否存在不应在 .pch 文件中添加所有导入的原因?

    我主要指的是应用程序级导入 而不是构建库时的导入 在这种情况下 很明显为什么应该避免导入 pch 文件内的标头 要点是 pch文件的优点是它可以预编译一次并且无需处理 如果您将所有应用程序标头导入 pch 每次更改其中任何一个标头时都必须重
  • 如何创建具有多个子行(嵌套表)的 jQuery 数据表?

    问题 我需要创建一个具有嵌套表格式的表 当用户单击加号按钮时 它应该显示嵌套表 如果他们点击减号按钮 它应该隐藏 我已经完成了jquery datatable 它工作正常 但我无法显示子表的多行 我已经尝试了很多次 但无法显示正确的格式 这
  • 如何在每个循环周期更新一步进度条? C#

    使用 C Windows 窗体创建 net 应用程序 如何在 100 个循环的每个循环中更新进度条 1 步 我正在循环中处理 Excel 工作表 进度条控件位于 UI 类中 该类连接到控制器类 该控制器类连接到自定义类 MVC 模式 循环位
  • XSLT:如何通过另一个节点查找该节点的值

    我不确定我是否正确地提出了这个问题 这就是为什么我在任何地方都找不到答案 但基本上我需要将一个节点与另一个节点进行匹配 并使用同级节点作为值 这是一个例子
  • Angular 6 中使用 Typescript 进行 Datalayer.push

    当我点击按钮时 我应该发送到数据层信息 但我不知道该怎么做 因为我使用的是 Angular 6 所以我需要使用 Typescript 和 window dataLayer push 不起作用 给我这个错误 Form
  • 如何检测 iOS 8 中 UITextField 上的删除键?

    我对 UITextField 进行了子类化 并实现了 UIKeyInput 协议的 deleteBackward 方法来检测按下的退格键 这在 iOS 7 上工作正常 但在 iOS 8 上不行 当我按退格键时 UITextField 上不再
  • 删除溢出的内联元素行之间的边距

    我正在创建一个基于图块的游戏 并使用块渲染来更新大量图块 我试图以最简单的方式做到这一点 所以我一直在尝试使用 HTML 的默认布局 现在我正在创建 内联块 省略元素之间的空白以避免它们之间的水平空间 但是当块溢出并创建新行时 会有一些垂直
  • 如何在 Swift 中更改 UIBezierPath 的颜色?

    我有一个实例UIBezierPath我想将描边的颜色更改为黑色以外的颜色 有谁知道如何在 Swift 中做到这一点 有了 Swift 5 UIColor has a setStroke https developer apple com d
  • 过滤 Chrome 控制台消息

    有没有办法在 Chrome 控制台中过滤消息 例如 我不想看到来自 包含 JQMIGRATE 的消息 您可以通过在前面添加来否定过滤器 例如 JQMIGRATE将排除包含字符串 JQMIGRATE 的消息 正则表达式过滤器也可以通过这种方式
  • 自动装配依赖项注入失败

    我在 Java EE 应用程序中使用 Spring 和 Hibernate 该项目托管于这个 GitHub 存储库 http github com whirlwin niths 我通过服务使用 Autowired 时遇到问题 如下所示 pa
  • Django 信号 - kwargs['update_fields'] 在通过 django admin 进行模型更新时始终为 None

    我的 django 应用程序中有一个信号 我想检查模型中的某个字段是否已更新 以便我可以继续执行某些操作 我的模型看起来像这样 class Product models Model name models CharField max len