【问题标题】:How do I set a ManyToMany field on post_save of a model?如何在模型的 post_save 上设置 ManyToMany 字段?
【发布时间】:2019-07-18 19:03:57
【问题描述】:

我有一个模型,比如说TicketTicket 具有 Tag 作为其他字段中的 ManyToMany 字段。

在有人更新Ticket 的任何字段(比如Description)后,我想将Tag 字段值设置为现有标签之一。

我该怎么做?

【问题讨论】:

    标签: python django django-models django-signals


    【解决方案1】:

    使用 Django 信号

    @receiver(post_save, sender=Ticket)
    def create_tag(sender, instance, created, **kwargs):
        if not created:
            instance.tags.add(Tag.objects.get(id=1)) #Add an existing tag
            instance.save()
    
    post_save.connect(create_tag, sender=Ticket)
    

    【讨论】:

    • 为什么只在createdTrue 时才建议添加标签?
    • tag 是 Ticket 中的多对多字段。为什么要在没有 Ticket 实例的情况下添加标签?如果您删除创建的代码也会运行,这只是一种更有条理的方式
    • 我们不能在Ticket更新时添加标签吗?如果是新创建的票,我相信 created 是真的,纠正我!
    • 我编辑了我的答案。如果调用 .save() ,也会调用 post_save 。不会在 .update() 上调用
    • 有没有办法避免在 post_save 中调用 .save() 引起的无限递归?
    猜你喜欢
    • 1970-01-01
    • 2014-07-10
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多