У меня есть приложение с системой пользовательских подписчиков, которую я смог достичь, но я пытаюсь получить отдельных последователей и последующих пользователей, но я не смог их получить. Ниже мой код
View.py
def following(request):
query = Contact.objects.filter(request.user.following)
context = {
'query': query
}
template = 'following.html'
return render(request, template, context)
Models.py
class Contact(models.Model):
user_from = models.ForeignKey(User,related_name='rel_from_set')
user_to = models.ForeignKey(User,related_name='rel_to_set')
created = models.DateTimeField(auto_now_add=True,db_index=True)
class Meta:
ordering = ('-created',)
def __str__(self):
return '{} follows {}'.format(self.user_from,self.user_to)
User.add_to_class('following',models.ManyToManyField('self', through=Contact,related_name='followers', symmetrical=False))
шаблон
{% load staticfiles %}
{% block content %}
<h2>following</h2>
<div id="action-list">
<h1>{{ results.get_full_name }}</h1>
</div>
{% endblock %}
Дополнительный код будет добавлен по запросу.
Это можно решить двумя способами. Во-первых: ваш фильтр неправильный:
def following(request):
query = Contact.objects.filter(user_from=request.user)
context = {
'query': query
}
template = 'following.html'
return render(request, template, context)
Другое решение с обратным отношением, использующее related_name
def following(request):
query = request.user.rel_from_set.all()
context = {
'query': query
}
template = 'following.html'
return render(request, template, context)
Подобные работы, конечно же, для поля user_to
Contact
.
EDIT: ваш шаблон не использует соответствующие контекстные переменные, которые вы определили в following
. Поэтому вам нужно немного настроить его:
{% load staticfiles %}
{% block content %}
<h2>following</h2>
<div id="action-list">
{% for result in query %}
<h1>{{ result }}</h1>
{% endfor %}
</div>
{% endblock %}
User.objects.filter(rel_from_set__user_to=request.user)
?