не удалось получить запись в django с помощью списка

#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 выглядит? Вы уверены , что все числа соответствуют a User (это одна из многих причин не работать с an IntegerField , так как это не гарантирует ссылочную целостность.