post_save 没有列出标签

post_save doesn't list tags

想法是在对象具有某些标签但未列出标签时使用 post_save 信号来执行操作

@receiver(post_save, sender=List)
def list_saved(sender, instance, created, **kwargs):
    if created:
        for tag in instance.tags.all():
            print(tag.name)

这从不列出任何标签,它是一个空查询集。
然而,如果我然后打开 shell 并执行:

>>> l = List.objects.filter(pk=1).get()
>>> for tag in l.tags.all():
>>>   print(tag.name)

它工作正常。

为什么标签在 post_save 中不可用?

标签被添加到列表中:

class List(models.Model):
    tags = TaggableManager()

我假设 tags 是它的核心 ManyToManyField。如果是这种情况,那么当您创建一个 List 实例时,它不会有任何 tags 集。您需要连接到 m2m_changed signal 以确定 tags 集合中的更改。