【问题标题】:ManyToMany field is not assigned in pre_(post_)save trigger在 pre_(post_)save 触发器中未分配 ManyToMany 字段
【发布时间】:2014-09-30 07:12:09
【问题描述】:

我正在尝试使用 post_save 触发器中的 ManyToMany 字段。 一个例子

@receiver(post_save, sender=Post, dispatch_uid='update_post_images')
def update_post_images(sender, instance, using, **kwargs):
   post_save.disconnect(update_post_images, sender=Post, dispatch_uid='update_post_images')
   print 'before', instance.images.all()
   img = Image.object.get(pk=1469)
   instance.images.add(img)
   print 'after', instance.images.all()
   post_save.connect(update_post_images, sender=Post, dispatch_uid='update_post_images')

现在,当我查看 django 控制台时,我确切地看到了我想要的。 print 'before' 输出一个图像对象和print 'after' - 2 个对象 但是当我从 python 控制台(manage.py shell)查询同一个帖子对象时,我看到只有一个图像。

请有人告诉我这个触发器有什么问题

【问题讨论】:

    标签: python django django-signals django-orm


    【解决方案1】:

    ManyToManyFields 的行为与其他带有信号的字段不同。查看m2m_changed Signal 并在该信号而不是 post_save 信号上运行您的逻辑。

    【讨论】:

    • 我认为这不是我需要的。再一次,我需要在 post_save 触发器中为 ManytoMany 字段填充一些值。例如,用户更改了模型 Post 中的文本字段。在 post_save 中,我正在解析 img 标签的文本并使用这些值填充 Post.images - 字段
    • 经过一番调查,我发现了这个:stackoverflow.com/questions/4432385/… 链接,它工作得很好。所以你确实是对的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2018-11-01
    相关资源
    最近更新 更多