Ошибка при попытке следить за пользователями в Django

#django #django-models #django-views #django-forms #django-templates

#django #django-модели #django-просмотры #django-forms #django-шаблоны

Вопрос:

У меня ошибка, когда я пытаюсь следить за пользователями, когда я нажимаю кнопку «Следовать» в каком-либо профиле пользователя, я должен следовать за ним, но происходит обратное, он следует за мной, но я не следую за ним

Моя модель

 class Account(AbstractBaseUser):
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=30, unique=True)
date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)

following = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True ,related_name="follow")
 

Вид

     class AddFollwers(LoginRequiredMixin, View):
    def post(self, request, pk, *args, **kwargs):
        account = Account.objects.get(pk=pk)
        account.following.add(request.user)
        return redirect('account:view', account.pk)

class RemoveFollowers(LoginRequiredMixin, View):
    def post(self, request, pk, *args, **kwargs):
        account = Account.objects.get(pk=pk)
        account.following.remove(request.user)
        return redirect('account:view', account.pk)
 

URL-адреса

     path('follower/<int:pk>/add', AddFollwers.as_view(), name='add-follower'),
path('follower/<int:pk>/remove', RemoveFollowers.as_view(), name='remove-follower'),
 

Шаблон html

 {% if username == request.user.username %}
    
    {% else %}
    
   {% if is_following %}
    <form action="{% url 'account:remove-follower' pk=id%}" method="POST">
        {% csrf_token %}
  <button type="submit" class="btn btn-danger">Unfollow</button>
        </form>
{% else %}<form action="{% url 'account:add-follower' pk=id%}" method="POST">
    {% csrf_token %}
<button type="submit" class="btn btn-success">Follow</button>
        </form>
    {% endif %}
    {% endif %}
 

Комментарии:

1. Ваша логика представления class AddFollwers неверна. account Должно быть установлено значение request.user и account.following.add() значение user , соответствующее вашему pk аргументу.

2. Также не забудьте отметить ответ на ваши предыдущие вопросы, если они были полезны для вашего случая.

3. @Hisham___Pak не могли бы вы уточнить второе, account.following.add() вы это имели в виду account.following.add(user=pk)

4. @Hisham___Pak Не могли бы вы добавить свой ответ

5. @MohamedSoliman Он имеет в виду, что ты должен писать request.user.following.add(account) .

Ответ №1:

Ваша логика представления кажется неверной.

 class AddFollwers(LoginRequiredMixin, View):
    def post(self, request, pk, *args, **kwargs):
        account = Account.objects.get(pk=pk)
        account.following.add(request.user)
        return redirect('account:view', account.pk)
 

Должно быть,

 class AddFollwers(LoginRequiredMixin, View):
    def post(self, request, pk, *args, **kwargs):
        account = request.user # The currently logged in user.
        follow_account = Account.objects.get(pk=pk) # The account that is to be followed.
        account.following.add(follow_account)
        return redirect('account:view', follow_account.pk) # So it redirects to follow_account user view.
 

Значительно расширив это, чтобы вы могли понять, вы также можете написать это другими способами, как предложил АбдулАзизБаркат. По сути, вы добавляете вошедшего в систему пользователя в следующую таблицу пользователя, за которым хочет следовать вошедший в систему пользователь. Но ожидая, что результат будет наоборот.