用信号更新模型



现在我正试图在postrongave信号的帮助下更新模型中的字段。所有的工作都很好的管理页面,但字段";照片的数目";只有在我第二次点击保存按钮后才更新。为什么会发生这种情况?

信号代码:

@receiver(post_save, sender=PhotoAlbum)  # noqa
def count_photos(sender, created, instance, *args, **kwargs):  # noqa
instance.number_of_photos = instance.photos.count()
signals.post_save.disconnect(count_photos, sender=PhotoAlbum)
instance.save()
signals.post_save.connect(count_photos, sender=PhotoAlbum)

型号:

class PhotoAlbum(models.Model):
title = models.CharField(verbose_name='Название альбома', max_length=50, null=True)
created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, verbose_name='Автор')
created_at = models.DateTimeField(verbose_name='Дата создания', editable=False,
default=datetime.datetime.today())
photos = models.ManyToManyField('Photo', verbose_name='Фото', blank=True, related_name='photo_albums')
number_of_photos = models.PositiveIntegerField(verbose_name='Количество фото', null=True, editable=False)

class Meta:
verbose_name = 'Фотоальбом'
verbose_name_plural = 'Фотоальбомы'

我部分理解了为什么会发生这种情况,并将信号从postrongave更改为m2m_changed,现在我的代码工作正常。代码:

@receiver(m2m_changed, sender=PhotoAlbum.photos.through)  # noqa
def count_photos(sender, instance, **kwargs):  # noqa
instance.number_of_photos = instance.photos.count()
signals.m2m_changed.disconnect(count_photos, sender=PhotoAlbum)
instance.save()
signals.m2m_changed.connect(count_photos, sender=PhotoAlbum)

最新更新