首页 > 解决方案 > 无法使用列表在 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()

标签: django

解决方案


您需要使用__in查找进行过滤:

urr= User.objects.filter(id__in=flist)

话虽如此,如果我们制作following_ida ,您可以有效地过滤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 编写的,因此您可能希望将模型从 重命名userfollowingUserFollowing


注意:通常使用settings.AUTH_USER_MODEL[Django-doc]引用用户模型比直接使用User模型 [Django-doc]更好。有关更多信息,您可以查看文档的引用User模型部分


推荐阅读