【问题标题】:Detecting object creation from m2m_change signal handler从 m2m_change 信号处理程序检测对象创建
【发布时间】:2014-10-30 23:00:35
【问题描述】:

我的问题类似于其他一些关于在保存对象时处理 M2M 字段的问题,例如。 Django accessing ManyToMany fields from post_save signal
Django: Using signals to save a ManyToMany field

基本上,为了使用 M2M 字段,您需要监听 m2m_changed 而不是 post_save

我遇到的问题是我希望我的操作仅在 创建 一个新对象时发生 -- post_save 得到一个 created 参数,但据我所知没有类似的对于m2m_changed,当m2m_changed 信号被触发时,对象已被保存并被赋予一个PK,因此无法从信号处理程序中判断它是新创建的对象还是已更新的现有对象。

有没有办法解决这个问题?

【问题讨论】:

  • 非常想知道用例,因为您尝试实现的目标可能可以在post_save 信号本身中完成。此外,m2m 是专门称为 after 动作(post_save、pre_save 等)的。

标签: django django-admin


【解决方案1】:

解决方法: - 您可以将 post_save 方法与分配给模型的变量一起使用。例如,您可以在创建对象时将变量设置为“已创建”。然后您可以告诉模型,仅当该变量设置为已创建时才执行某些操作。一旦它执行操作,您可以将该变量设置为“更新”。然后操作将不会在处理程序中触发。

  • 您可以使用“通过”功能设置连接模型。这样您就可以创建 Django 自动执行的连接表并根据该模型执行操作。

【讨论】:

    猜你喜欢
    • 2023-02-19
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多