干草堆,呜呜不能用搜索来启动

2024-04-20 16:01:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我是django的一个新手,很抱歉这个问题如此琐碎。有人能告诉我get\u queryset()和get\u context\u data()函数之间的关系吗。你知道吗

我有大海捞针。我正在努力使“startswith”搜索工作。当我查找索引的完整单词时,我可以在get\u queryset和context中的object\u列表中找到该单词。但是当我查找这个单词的前3个字母时,我可以看到get\u queryset()找到了它,但是上下文中的object\u列表是空的。这两个功能如何工作,为什么我有不同的搜索结果。你知道吗

例如:在数据库中,我有一个类似“nametookfor”的名称 当我搜索“nametookfor”时,一切都很好。 但当我搜索“name”时,get\u queryset可以找到它,但它不在上下文中

我的观点:

class MainPageView(SearchView):
    """ View for main page """
    template_name = "index.html"
    form_class = PersonalSearchForm
    model = PersonalProfileModel


    @method_decorator(never_cache)
    @method_decorator(csrf_protect)
    @method_decorator(sensitive_post_parameters())
    def dispatch(self, *args, **kwargs):
        return super(MainPageView, self).dispatch(*args, **kwargs)

    def post(self, request):
        pass

    def get_context_data(self, **kwargs):
        context = super(MainPageView, self).get_context_data(**kwargs)
        print context
        return context

    def get_queryset(self):
        form_class = PersonalSearchForm
        # further filter queryset based on some set of criteria
        queryset = super(MainPageView, self).get_queryset()
        form = form_class(self.request.GET or None)
        if form.is_valid():
            qr = form.cleaned_data['q']
            print qr
            queryset = queryset.filter(name__startswith=qr)
            object_list = self.model.objects.filter(name__startswith=qr)
            print queryset
        return queryset

形式:

class PersonalSearchForm(SearchForm):

    def search(self):
        sqs = super(PersonalSearchForm, self).search()

        if not self.is_valid():
            return self.no_query_found()

        return sqs

Tags: nameselfformdatagetreturndefcontext