【问题标题】:get_query_set(self) is not being called in djangodjango 中没有调用 get_query_set(self)
【发布时间】:2017-12-15 10:42:49
【问题描述】:

我在 Django 中使用 TemplateView 实现搜索功能,类是

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'),

搜索按钮的表单

    <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(self),但是调用了 get_context_data(...),为什么?

【问题讨论】:

    标签: django


    【解决方案1】:

    如果您查看文档,TemplateView 没有方法 get_queryset()。然后,您必须在视图中手动调用它。

    【讨论】:

      【解决方案2】:

      TemplateViews 对查询集一无所知,因此它们从不调用get_queryset 方法。你应该继承一个更合适的视图,也许是 ListView。

      【讨论】:

      • 我们可以使用 listview URL 在 URL 映射中使用除 之外的另一个参数,就像我在这里使用 一样
      • 当然可以。你可以在任何你喜欢的视图中拥有你喜欢的任何参数。
      猜你喜欢
      • 2020-12-10
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 2011-05-08
      • 2013-09-11
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      相关资源
      最近更新 更多