我尝试使用信号跟踪m2m变化以创建活动历史记录,我使用django activity stream
我试图使用pre_save信号并比较字段的原始状态和实际状态,但由于某种原因我无法理解我的字段是无,即使它包含信息,这里是代码
@receiver(pre_save, sender=Artwork)
def artwork_update_handler(sender, instance, **kwargs):
orig = Artwork.objects.get(pk=instance.pk)
print (orig.collectors)
print (instance.collectors)
if orig.collectors != instance.collectors:
print ("collectors diff")
我也试过使用m2m_changed信号,但是即使更新模型中的其他字段也发送信号,我不知道哪个字段是更新
答案 0 :(得分:0)
跟踪m2m变化并不容易。之前我确实有类似的要求,我最终做的是使用django simple history包。它是一个简单跟踪模型对象的所有更改(创建,更新,删除)的包。但是,对于正常情况,m2m字段不明确存在,因此我添加了through模型仅用于历史记录跟踪。它可能有点过分取决于你想要这个功能有多糟糕,但绝对值得一试。
答案 1 :(得分:0)
m2m字段在保存时发送2个信号:“ pre_add”,“ post_add”,“ pre_remove”,“ post_remove”。没有pre_save。
因此它将看起来像这样:
@receiver(m2m_changed, sender=Artwork.the_m2m_field.through)
def artwork_update_handler(sender, instance, action, model, pk_set, **kwargs):
if action == 'pre_save':
orig = Artwork.objects.get(pk=instance.pk)
print (orig.collectors)
print (instance.collectors)
if orig.collectors != instance.collectors:
print ("collectors diff")