un1t
@un1t

Почему m2m_changed вызывается в момент когда связи еще нет?

Есть две связанные модели

class Tag(models.Model):
    pass

class Photo(models.Model):
    tags = models.ManyToManyField(Tag, related_name='tags', blank=True)


Вот так конекчусь:

@receiver(m2m_changed, sender=Photo.tags.through)
def photo_tags_changed(sender, instance, action, **kwargs):
    print( action, kwargs, instance.tags.all())


Вывод print
post_add {'pk_set': {28538}, 'using': 'default', 'reverse': False, 'model': <class 'apps.photos.models.Tag'>, 'signal': <django.db.models.signals.ModelSignal object at 0x7fc890ddda20>} []


Насколько я понимаю action "post_add" должен происходить уже после добавления связи.
Однако в pk_set новый тэг передается, но если сделать instance.tags.all() то связь еще не создана. Я думал может что-то в ORM закешилось, но проверил в этот момент в базе, связи еще нет.

Я использую DRF, сериалайзер выглядит так:

class PhotoWriteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Photo


Похоже каким-то образом влияет DRF, т.к. если без него из консольки добавлять тэги, то в post_add связи уже есть.
  • Вопрос задан
  • 353 просмотра
Пригласить эксперта
Ответы на вопрос 1
un1t
@un1t Автор вопроса
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы