【问题标题】:How to track m2m field changes in django?如何跟踪 django 中的 m2m 字段变化?
【发布时间】:2014-12-30 09:27:09
【问题描述】:

我需要类似 m2m_changed 信号:

def event_handler(sender, instance, **kwargs):
   pass
m2m_changed.connect(event_handler, sender=MyModel.tags.through)

但我想知道 event_handler

instance.tags 的先前状态

【问题讨论】:

  • 如果标签被更改,我需要执行一些操作。

标签: python django m2m


【解决方案1】:

我相信您现在已经找到了解决方案。但是对于其他参考,您可以通过检查 kwargs['action'] == "pre_add"kwargs['action'] == "pre_remove" 在任何更新发生之前检查值来做到这一点。您可以找到更多详细信息here

【讨论】:

    【解决方案2】:

    查看 Django 文档:

    https://docs.djangoproject.com/en/dev/ref/signals/#m2m-changed

    您应该能够使用信号处理程序的actionpk_set 参数来找出发生了什么。

    【讨论】:

    • 这对我不起作用。我正在使用 django-admin。当我更改模型时,我总是有 2 个查询:从模型中删除所有 m2m 字段,然后将 POST 查询中的 m2m 字段添加到我的模型。例如,我有一个带有 m2m 字段 [3,6,7,8] 的模型。我想删除一个字段“8”。当我这样做时,我有 2 个信号(从技术上讲是 4 个,但没关系):第一个是 pre/post_clearpk_setNone第二个是 pre/post_add,其中 pk_set[3,6,7]。所以我不知道信号处理程序中发生了什么。
    • pre_removepre_clearpre_add 中,您应该能够访问instance.tags 以获取标签before 更改。
    猜你喜欢
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2013-06-04
    相关资源
    最近更新 更多