gpt4 book ai didi

Django 从 post_save 信号访问 ManyToMany 字段

转载 作者:行者123 更新时间:2023-11-28 19:36:51 25 4
gpt4 key购买 nike

我有一个 Django 模型,我想在保存时或保存后立即修改对象权限。我尝试了一些解决方案,post_save 信号似乎是我想做的事情的最佳选择:

    class Project(models.Model):
title = models.CharField(max_length=755, default='default')
assigned_to = models.ManyToManyField(
User, default=None, blank=True, null=True
)
created_by = models.ForeignKey(
User,
related_name="%(app_label)s_%(class)s_related"
)


@receiver(post_save, sender=Project)
def assign_project_perms(sender, instance, **kwargs):
print("instance title: "+str(instance.title))
print("instance assigned_to: "+str(instance.assigned_to.all()))

在这种情况下,当一个项目被创建时,信号被触发并且我看到了 title,但是 assigned_to 字段的列表是空的。

如何在保存后访问保存的 assigned_to 数据?

最佳答案

你不会的。 M2M 是在保存实例后保存的,因此所有的 m2m 更新都不会有任何记录。进一步的问题(即使您解决了该问题)是您仍在事务中并且无论如何查询数据库都不会使您的 m2m 具有正确的状态。

解决方案是挂接到 m2m_changed 信号而不是 post_save

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

然后您的发件人将是 Project.assigned_to.through

关于Django 从 post_save 信号访问 ManyToMany 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com