def follow(self, request, pk=None): profile = self.get_user(request, pk) allow_follow_user(request.user, profile) profile_followers = profile.followers with transaction.atomic(): if request.user.is_following(profile): request.user.follows.remove(profile) followed = False profile_followers -= 1 profile.followers = F('followers') - 1 request.user.following = F('following') - 1 else: request.user.follows.add(profile) followed = True profile_followers += 1 profile.followers = F('followers') + 1 request.user.following = F('following') + 1 profile.save(update_fields=['followers']) request.user.save(update_fields=['following']) return Response({ 'is_followed': followed, 'followers': profile_followers })
def follow(self, request, pk=None): profile = self.get_user(pk) allow_follow_user(request.user, profile) profile_followers = profile.followers with transaction.atomic(): if request.user.is_following(profile): request.user.follows.remove(profile) followed = False profile_followers -= 1 profile.followers = F('followers') - 1 request.user.following = F('following') - 1 else: request.user.follows.add(profile) followed = True profile_followers += 1 profile.followers = F('followers') + 1 request.user.following = F('following') + 1 profile.save(update_fields=['followers']) request.user.save(update_fields=['following']) return Response({ 'is_followed': followed, 'followers': profile_followers })
def follow_user(request, profile): user_locked = request.user.lock() profile.lock() if request.user.is_following(profile): request.user.follows.remove(profile) followed = False else: allow_follow_user(request.user, profile) followed = True request.user.follows.add(profile) if followed: message = _("You are now following %(user)s.") notify_user(profile, _("%(user)s is now following you."), reverse(user_profile.get_default_link(), kwargs={ 'user_slug': user_locked.slug, 'user_id': user_locked.id }), "profile_%s" % user_locked.pk, formats={'user': user_locked.username}, sender=user_locked, update_user=False) else: message = _("You have stopped following %(user)s.") message = message % {'user': profile.username} profile.followers = profile.followed_by.count() if followed: profile.save(update_fields=['followers', 'new_notifications']) else: profile.save(update_fields=['followers']) user_locked.following = user_locked.follows.count() user_locked.save(update_fields=['following']) if request.is_ajax: return {'is_following': followed, 'message': message} else: messages.success(request, message)