首页 > 解决方案 > 在上下文中传递 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

标签: djangodjango-modelsdjango-viewsdjango-templates

解决方案


在您的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

*注意:- 如果您期望querySetfrom get_queryset(),那么请知道这是两种不同的方法,并且您querySet在本地定义。或者,你必须从self.get_queryset()@OlegТ 提到的那样得到它。


推荐阅读