django - 在上下文中传递 get_queryset
问题描述
需要帮助将返回的值从get_queryset
上下文传递给渲染,我正在阅读 Django 文档Class-based Views
并且我不断收到相同的错误名称'querySet' is not defined
,任何关于我做错了什么的见解将不胜感激。
class SearchPropertyListView(ListView):
template_name = "search/search_list.html"
def get_queryset(self):
querySet = Property.objects.all()
city_or_neighborhood = self.request.GET.get('city_or_neighborhood')
category = self.request.GET.get('category')
purpose = self.request.GET.get('purpose')
if city_or_neighborhood != '' and city_or_neighborhood is not None:
querySet = querySet.filter(Q(city__title__icontains=city_or_neighborhood)
| Q(neighborhood__title__icontains=city_or_neighborhood)
).distinct()
elif category != '' and category is not None:
querySet = querySet.filter(category__title=category)
elif purpose != '' and purpose is not None:
querySet = querySet.filter(purpose__title=purpose)
return querySet
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
city = City.objects.all().annotate(
num_property=Count("property")).order_by("-num_property")
categories = Category.objects.all()
purposes = Purpose.objects.all()
featured = list(Property.objects.filter(featured=True))
shuffle(featured)
context['city'] = city
context['categories'] = categories
context['featured'] = featured
context['purposes'] = purposes
context['querySet'] = querySet
return context
解决方案
在您的get_context_data()
, 您有querySet
未定义的:
def get_context_data(self, *args, **kwargs):
.....
context['purposes'] = purposes
context['querySet'] = querySet <----- Here
return context
所以,你应该定义你的querySet
喜欢:
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
city = City.objects.all().annotate(
num_property=Count("property")).order_by("-num_property")
categories = Category.objects.all()
purposes = Purpose.objects.all()
featured = list(Property.objects.filter(featured=True))
querySet = self.get_queryset()
shuffle(featured)
context['city'] = city
context['categories'] = categories
context['featured'] = featured
context['purposes'] = purposes
context['querySet'] = querySet
return context
*注意:- 如果您期望querySet
from get_queryset()
,那么请知道这是两种不同的方法,并且您querySet
在本地定义。或者,你必须从self.get_queryset()
@OlegТ 提到的那样得到它。
推荐阅读
- bash - Linux bash - 循环文件并总结该文件中的值
- python-3.x - How to fix error: Cygwin gcc cannot be used with --compiler=mingw32
- swift - 在嵌套的字符串数组上使用 Swift 可解码
- javascript - 在时刻js将已知时区的时间转换为本地时区
- javascript - 将字母编码为数字
- python - 使用 OpenCV 从图片中查找圆顶的半径
- winapi - GetOpenFileName() 自定义过滤
- coq - 我们可以对哪些子项应用引理?
- azure - HTTP 错误 404.3 - 在带有 asp.net MVC 和 WebAPI 核心 2.1 的 Azure 中找不到
- c - 如何正确管理 pthread