簡體   English   中英

在上下文中傳遞 get_queryset

[英]Pass get_queryset in Context

需要幫助將返回值從get_queryset傳遞到上下文進行渲染,我正在閱讀關於Class-based Views的 Django 文檔,我不斷收到相同的錯誤名稱'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 get_queryset()獲得 querySet,那么請知道這是兩種不同的方法,並且您在本地定義querySet 或者,您必須按照@OlegТ 所述從self.get_queryset()獲取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM