Мой код
Просмотры
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" еще раз
Этот способ немного запутан в использовании.
Я хочу получить "подписчика одного пользователя" и "подписчика одного пользователя", используя только ключевые слова "подписчики" и "подписки".
Стоит ли мне попробовать другой способ создания следящей модели?
пожалуйста, дайте мне совет или идею.
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 %}
и т. Д.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.