Мой код

Просмотры

class FollowView(LoginRequiredMixin, View):
    def post(self, request, *args, **kwargs):
        follow_from = request.user
        follow_to_username = request.POST.get('follow_to')
        follow_to = get_object_or_404(User, username=follow_to_username)
    
        try:
            follow_obj = Follow.objects.get(follow_from=follow_from, follow_to=follow_to)
            follow_obj.delete()
        except Follow.DoesNotExist:
            follow_obj = Follow.objects.create(follow_from=follow_from, follow_to=follow_to)

        return redirect(request.META.get('HTTP_REFERER'))

Модель

class Follow(models.Model):
    follow_from = models.ForeignKey(
        User, related_name='following', on_delete=models.CASCADE)
    follow_to = models.ForeignKey(
        User, related_name='follower', on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.follow_from} follows {self.follow_to}"

Шаблон профиля пользователя

<div class="card-body">
  <p> {{ object.user }} </p>
  <p> {{ object.state_message }}</p>

  <p> following </p>
  {% for follow in object.user.following.all %}
  <p> {{ follow.follow_to }}</p>
  {% endfor%}

  <br>

  <p> followers </p>
  {% for follow in object.user.follower.all %}
  <p> {{ follow.follow_from }}</p>
  {% endfor%}
</div>

Когда я пытаюсь получить подписчиков одного пользователя и подписчиков
{% для подписки в объекте. пользователь. подписчик (или подписчик). все%}
как это
я должен использовать ".follow_to" или ".follow_from" еще раз
Этот способ немного запутан в использовании.
Я хочу получить "подписчика одного пользователя" и "подписчика одного пользователя", используя только ключевые слова "подписчики" и "подписки".
Стоит ли мне попробовать другой способ создания следящей модели?
пожалуйста, дайте мне совет или идею.

0
wowsber 28 Фев 2021 в 13:18

1 ответ

Лучший ответ

Если вы используете собственную модель пользователя, вы можете добавить {{X0} } с 'self' и вашей моделью Follow в качестве сквозной модели, сохраняя при этом symmetrical=False:

class User(AbstractUser):
    following = models.ManyToManyField('self', through='Follow', symmetrical=False, related_name='followers')
    ...

Теперь вы можете получить прямой доступ к связанным моделям с помощью {% for follow in user.following.all %} и т. Д.

0
Abdul Aziz Barkat 28 Фев 2021 в 10:34