首页 > 解决方案 > 如何执行与值列表匹配的 Django 查询过滤器?

问题描述

嘿伙计们,我正在做一个小型社交媒体应用程序,现在我无法弄清楚如何显示某人正在关注的用户的帖子。现在,我创建了一个列表,将所有用户名作为值添加到其中。如何过滤掉 Django 查询结果,它打印出列表中包含的所有结果?

我可以在它只打印出其中一个追随者帖子的情况下做到这一点,因为我可以轻松地比较一个值。但是,当我需要与值列表进行比较时,我该怎么做呢?有任何想法吗?多谢你们。

下面是我的代码:

def follows(request, username):
# create list
list = []
# get the username of the signed in user
userSearch = User.objects.get(username = username)
# get the user ID of the signed in user
userID = userSearch.id
# get the user IDs of the followers of the signed in user
query = Follow.objects.filter(follower_id = userID)
#get the usernames of the followers of the signed in user
query2 = User.objects.filter(id = query[0].following_id)
#add the usernames to a list
for i in query:
    list.append(i.username)

query3 = NewPost.objects.filter(username = query2[0].username)
paginator = Paginator(query3, 10)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(request, "network/follows.html", { "page_obj": page_obj })

模型.py:

from django.contrib.auth.models import AbstractUser
from django.contrib.postgres.fields import ArrayField
from django.db import models

class User(AbstractUser):
    pass
    
class Follow(models.Model):
    follower_id = models.IntegerField(default=0)
    following_id = models.IntegerField(default=0)

class NewPost(models.Model):
    userID = models.IntegerField(default=0)
    username = models.CharField(max_length=64, default="")
    body = models.CharField(max_length=64)
    likes = models.IntegerField(default=0)
    timestamp = models.DateTimeField(auto_now_add=True)

标签: pythondjangodjango-queryset

解决方案


我用这段代码来做我需要的。

query3 = NewPost.objects.filter(userID__in = list)

推荐阅读