【发布时间】:2020-04-15 22:28:53
【问题描述】:
我有一个看起来像这样的信号:
@receiver([post_save, post_delete], sender=Following)
def increment_follow_count(instance, created=False, **kwargs):
if created:
instance.follower.following_count += 1
instance.target.follower_count += 1
else:
instance.follower.following_count -= 1
instance.target.follower_count -= 1
当一个用户关注另一个用户时,它可以正常工作。但是,当同一用户取消关注该用户时,只有该用户关注的人(目标)的关注者计数减少,但用户的关注计数不减少。为什么会发生这种行为,我该如何解决?
型号:
class Following(models.Model):
target = models.ForeignKey('User', related_name='followers', on_delete=models.CASCADE, null=True)
follower = models.ForeignKey('User', related_name='targets', on_delete=models.CASCADE, null=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '{} is followed by {}'.format(self.target, self.follower)
关注/取消关注用户的代码
def follow_unfollow(follower, target):
# Query to see if the following exists or not
following = target.followers.filter(follower=follower)
if following.exists():
following.delete()
else:
target.followers.create(follower=follower)
target.save()
follower.save()
【问题讨论】:
-
请分享模型定义,我怀疑接收器正在监听错误的对象更改并且没有正确跟踪相关模型更新
-
@GiorgiJambazishvili 嗨,我刚刚用模型更新了问题
-
当用户取消关注其他用户时,您是否正在删除该对象?如果是,那么您需要使用 post_delete 信号。您能否添加更多代码来显示未关注用户的流程?
-
@NalinDobhal 另外,我正在使用 post_delete 看看信号
-
可能你只需要在模型更改计数中添加一个方法,你可以在其中捕获每个更改,然后在保存后调用它
标签: python django django-models django-signals