Я делаю твиттер-клон, но сейчас я застрял в следующей проблеме и следую за ней, я написал код, который может позволить пользователям отслеживать и отписываться от пользователя, но он не работает. Хотя все кажется правильным. Я думаю, что проблема заключается в том, что когда представление UserFollow выполняет, оно должно выполнить свою задачу, а затем перенаправить, но оно не перенаправляет, что не завершает весь вид, что может быть в этом случае.
Вот модели.py
class ProfileManager(models.Manager):
def all(self):
qs = self.get_queryset().all()
if self.instance:
qs = qs.exclude(user = self.instance)
else:
pass
return qs
def toggle_follow(self, user, to_toggle_user):
user_profile, created = Profile.objects.get_or_create(user=user) # (user_obj, true)
if to_toggle_user in user_profile.following.all():
user_profile.following.remove(to_toggle_user)
added = False
else:
user_profile.following.add(to_toggle_user)
added = True
return added
def is_following(self, user, followed_by_user):
user_profile, created = Profile.objects.get_or_create(user=user)
if created:
return False
if followed_by_user in user_profile.following.all():
return True
return False
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,related_name = "profile")
following = models.ManyToManyField(settings.AUTH_USER_MODEL,blank = True,related_name = "followed_by")
objects = ProfileManager()
Вот views.py
class UserProfile(DetailView):
model = User.objects.all()
template_name = 'accounts/user_detail.html'
def get_object(self):
return get_object_or_404(User,username__iexact = self.kwargs.get('username'))
def get_context_data(self, *args, **kwargs):
context = super(UserProfile, self).get_context_data(*args, **kwargs)
following = Profile.objects.is_following(self.request.user, self.get_object())
context['following'] = following
# context['recommended'] = UserProfile.objects.recommended(self.request.user)
return context
class UserFollow(View):
def get(self,request,username,*args,**kwargs):
toggle_user = get_object_or_404(User, username__iexact=username)
if request.user.is_authenticated():
is_following = Profile.objects.toggle_follow(request.user, toggle_user)
return redirect("accounts:detail",username=username)
Вот код шаблона для последующей и отписаться
<a href='{% url 'accounts:follow' object.username %}'class="btn btn-info">
{% if following %}Unfollow {% else %}Follow{% endif %}</a>