Есть две связанные модели
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 связи уже есть.