2017-07-11 19 views
0

我實現使用TemplateView在Django類搜索功能get_query_set(個體經營)不會被調用在Django

class part_search_view(TemplateView): 
    model = part_list 
    context_object_name = 'part_list' 
    template_name = 'part_list.html' 

    def get_context_data(self, **kwargs): 
     context = super(part_search_view, self).get_context_data(**kwargs) 
     context['my_list'] = populate_nav_bar() 
     return context 

    def get_queryset(self): 
     key = self.request.GET['search_text'] 
     partlist = part_list.objects.filter(Q(part_id__icontains=key) |  Q(part_name__icontains=key)) 
     return partlist 

part_list.html

{% for part in part_list %} 

<a href="{% url 'parts:part_detail' part.id %}" class="list-group-item">{{ part.part_id }} - {{ part.part_name }}</a> 
<a href="{% url 'parts:part_update_view' part.id %}" > Edit </a> 

{% endfor %} 

的URL映射爲

url(r'^search/',views.part_search_view.as_view(),name='part_search_view'), 

被按下搜索按鈕後,按鈕serch含

<form action="{% url 'parts:part_search_view'%}" role="form" class="navbar-form navbar-left" method="get" > 
    {% csrf_token %} 
    <div class="form-group "> 
     <input class="form-control mr-sm-2" type="text" placeholder="Search" name="search_text"> 
     <button class="form-control search_buton btn btn-success " type="submit" >Search</button> 
    </div> 
    </form> 

形式的地址是

http://127.0.0.1:8000/parts/search/?csrfmiddlewaretoken=PWjEw1hRsyH9B6YcseVuhS0urX8L7f170q9ucLF9hTPQPThulpgMSP4y5xhScCVr&search_text=mp6 

但get_query_set(個體經營)這裏沒有叫get_context_data(...)被稱爲雖然,爲什麼?

回答

3

TemplateViews不知道關於查詢集的任何內容,所以他們從來不會調用get_queryset方法。你應該繼承一個更合適的視圖,也許ListView。

+0

我們可以使用列表視圖的URL有另一個參數,除了URL映射中的像我在這裏使用這裏 –

+0

當然是的。您可以在任何您喜歡的視圖中使用任何參數。 –

2

如果您查看文檔,TemplateView沒有方法get_queryset()。然後,您必須在視圖中手動調用它。