在函数filter()(Django)中制作多个过滤器



我想要做的是使用多个值来过滤数据。我想要具有值为user.helpseekerprofile.rc1user.helpseekerprofile.rc2user.helpseekerprofile.rc3resource_category的ResourcePost对象。所以我试了如下:

def message_list_view(request):
user = request.user
def filter_watchlist(post):
filtered = ResourcePost.objects.all().filter(resource_category=user.helpseekerprofile.rc_1)
+ ResourcePost.objects.all().filter(resource_category=user.helpseekerprofile.rc_2)
+ ResourcePost.objects.all().filter(resource_category=user.helpseekerprofile.rc_3)
if post in filtered:
return True
else:
return False
post_list = ResourcePost.objects.all().filter(filter_watchlist).order_by("-date_created")
page = request.GET.get("page", 1)
paginator = Paginator(post_list, 20)
try:
posts = paginator.page(page)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
timestamp_now = datetime.datetime.now()
context = {
"mapbox_access_token": "pk." + os.environ.get("MAPBOX_KEY"),
"timestamp": timestamp_now,
"posts": posts,
}
return render(request, "donation/messages_home.html", context)

然而,TypeError出来说";不能解压缩不可迭代的函数对象";。我该怎么解决这个问题?

您应该通过使用进行过滤来创建查询集

helper = user.helpseekerprofile
post_list = ResourcePost.objects.filter(
resource_category__in=[helper.rc_1, helper.rc_2, helper.rc_3]
).order_by('-date_created')

您不能通过以下通用函数进行筛选:

ResourcePost.objects.filter(filter_watchlist).order_by('-date_created')

由于查询是在数据库端执行的,因此无法将函数转换为查询。

最新更新