#django
Вопрос:
Просмотр кода: ниже приведена моя функция просмотра кода, с помощью которой я хочу получить сведения о пользователе в списке.
def followingview(request):
if request.user.is_authenticated:
uid= request.session.get('uid')
ufg= userfollowing.objects.filter(userno_id=uid)
flist=[]
for i in ufg:
flist.append(i.following_id)
print(flist)
urr= User.objects.filter(id=(flist))
context={'ufg':ufg,'ur':urr}
return render(request,'following.html',context)
Html-Код:
<li class="text-center">
{%for j in urr%}
<h4 class="text-capitalize">UserName: {{j.username}}</h4>
<p class="text-muted text-capitalize">FirstName: {{j.first_name}}</p>
<p class="text-muted text-capitalize">LastName: {{j.last_name}}</p>
{%endfor%}
</li>
Модель:
class userfollowing(models.Model):
userno= models.ForeignKey(User,on_delete=models.CASCADE)
following_id= models.IntegerField()
Комментарии:
1. Не могли бы вы поделиться своей
userfollowing
моделью?2. Я поделился своей моделью.
Ответ №1:
Вам нужно отфильтровать с помощью __in
поиска:
urr= User.objects.filter(id__in=flist)
Тем не менее, вы можете эффективно фильтровать , если мы сделаем following_id
a ForeignKey
, так что:
class userfollowing(models.Model):
userno= models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='followees'
)
following = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='follows'
)
затем мы можем запросить с:
urr = User.objects.filter(follows__userno_id=uid)
Примечание. Модели в Django написаны в PascalCase, а не в snake_case,
поэтому вы можете переименовать модель извuserfollowing
UserFollowing
.
Примечание: Обычно лучше использовать
settings.AUTH_USER_MODEL
[Django-doc] для ссылки на модель пользователя, чем использоватьUser
модель [Django-doc] напрямую. Для получения дополнительной информации вы можете ознакомиться с разделом «Ссылки наUser
модель» документации.
Комментарии:
1. urr= Пользователь.объекты.фильтр(идентификатор__in=flist). Я попробовал это, но это также выборка одной записи.
2. @RaviMishra: как именно это
flist
выглядит? Вы уверены , что все числа соответствуют aUser
(это одна из многих причин не работать с anIntegerField
, так как это не гарантирует ссылочную целостность.