post_save не перечисляет теги

Идея состоит в том, чтобы использовать сигнал 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)

Это никогда не перечисляет никаких тегов, это пустой набор запросов.
Но если я тогда открою оболочку и сделаю:

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

Работает нормально.

Почему теги недоступны в post_save?

Теги добавляются в список как таковой:

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

1 ответ

Решение

Я предполагаю tags это ManyToManyField в основе этого. Если это так, то когда вы создаете List экземпляр у него не будет tags задавать. Вам нужно будет подключиться к m2m_changed сигнал для определения изменений в tags коллекция.

Другие вопросы по тегам