django使用get方法混合多个对象
也许有人知道,在我的视图中,我可以使用多个对象混合和get方法吗?我知道我需要指定queryset。但我能从方法上做到这一点吗django使用get方法混合多个对象,django,Django,也许有人知道,在我的视图中,我可以使用多个对象混合和get方法吗?我知道我需要指定queryset。但我能从方法上做到这一点吗 class Search(MultipleObjectMixin, View): paginate_by = 2 def get(self, request, *args, **kwargs): name = request.GET.get('name') products = Product.objects.filter(name__contain
class Search(MultipleObjectMixin, View):
paginate_by = 2
def get(self, request, *args, **kwargs):
name = request.GET.get('name')
products = Product.objects.filter(name__contains=name)
self.queryset = products
category = Category.objects.all()
return render(request, 'search_results.html', {'main_list': products,
'category_list': category, 'name': name,
'matches': len(products)})
更好的解决方案是使用
TemplateView
或ListView
您的示例中甚至没有使用MultipleObjectMixin
下面是一个示例,其中只有一个模板视图
,没有分页
class SearchView(TemplateView):
template_name = 'search_results.thml'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
name = self.request.GET.get('name', '')
products = Product.objects.filter(name__contains=name)
context['main_list'] = products
context['category_list'] = Category.objects.all()
context['name'] = name
context['matches'] = products.count()
return context
下面是一个带有列表视图的示例,我建议使用它,因为它使用了多对象mixin
,但为您节省了一些工作
class SearchView(ListView):
template_name = 'search_results.html'
model = Product
context_object_name = 'main_list'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
context['category_list'] = Category.objects.all()
context['name'] = self.request.GET.get('name', '')
context['matches'] = self.get_queryset().count()
return context
def get_queryset(self):
qs = super(SearchView, self).get_queryset()
name = self.request.GET.get('name', '')
return qs.filter(name__contains=name)
您甚至可以更进一步,创建一个CategoryMixin
,这样您就可以在其他视图中继承它,这样您就可以添加它以获得类别列表
class CategoryMixin(object):
def get_context_data(self, **kwargs):
context['category_list'] = Category.objects.all()
return context
class SearchView(CategoryMixin, ListView):
template_name = 'search_results.html'
model = Product
context_object_name = 'main_list'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
context['name'] = self.request.GET.get('name', '')
context['matches'] = self.get_queryset().count()
return context
def get_queryset(self):
qs = super(SearchView, self).get_queryset()
name = self.request.GET.get('name', '')
return qs.filter(name__contains=name)
更好的解决方案是使用TemplateView
或ListView
您的示例中甚至没有使用MultipleObjectMixin
下面是一个示例,其中只有一个模板视图
,没有分页
class SearchView(TemplateView):
template_name = 'search_results.thml'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
name = self.request.GET.get('name', '')
products = Product.objects.filter(name__contains=name)
context['main_list'] = products
context['category_list'] = Category.objects.all()
context['name'] = name
context['matches'] = products.count()
return context
下面是一个带有列表视图的示例,我建议使用它,因为它使用了多对象mixin
,但为您节省了一些工作
class SearchView(ListView):
template_name = 'search_results.html'
model = Product
context_object_name = 'main_list'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
context['category_list'] = Category.objects.all()
context['name'] = self.request.GET.get('name', '')
context['matches'] = self.get_queryset().count()
return context
def get_queryset(self):
qs = super(SearchView, self).get_queryset()
name = self.request.GET.get('name', '')
return qs.filter(name__contains=name)
您甚至可以更进一步,创建一个CategoryMixin
,这样您就可以在其他视图中继承它,这样您就可以添加它以获得类别列表
class CategoryMixin(object):
def get_context_data(self, **kwargs):
context['category_list'] = Category.objects.all()
return context
class SearchView(CategoryMixin, ListView):
template_name = 'search_results.html'
model = Product
context_object_name = 'main_list'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
context['name'] = self.request.GET.get('name', '')
context['matches'] = self.get_queryset().count()
return context
def get_queryset(self):
qs = super(SearchView, self).get_queryset()
name = self.request.GET.get('name', '')
return qs.filter(name__contains=name)
更好的解决方案是使用TemplateView
或ListView
您的示例中甚至没有使用MultipleObjectMixin
下面是一个示例,其中只有一个模板视图
,没有分页
class SearchView(TemplateView):
template_name = 'search_results.thml'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
name = self.request.GET.get('name', '')
products = Product.objects.filter(name__contains=name)
context['main_list'] = products
context['category_list'] = Category.objects.all()
context['name'] = name
context['matches'] = products.count()
return context
下面是一个带有列表视图的示例,我建议使用它,因为它使用了多对象mixin
,但为您节省了一些工作
class SearchView(ListView):
template_name = 'search_results.html'
model = Product
context_object_name = 'main_list'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
context['category_list'] = Category.objects.all()
context['name'] = self.request.GET.get('name', '')
context['matches'] = self.get_queryset().count()
return context
def get_queryset(self):
qs = super(SearchView, self).get_queryset()
name = self.request.GET.get('name', '')
return qs.filter(name__contains=name)
您甚至可以更进一步,创建一个CategoryMixin
,这样您就可以在其他视图中继承它,这样您就可以添加它以获得类别列表
class CategoryMixin(object):
def get_context_data(self, **kwargs):
context['category_list'] = Category.objects.all()
return context
class SearchView(CategoryMixin, ListView):
template_name = 'search_results.html'
model = Product
context_object_name = 'main_list'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
context['name'] = self.request.GET.get('name', '')
context['matches'] = self.get_queryset().count()
return context
def get_queryset(self):
qs = super(SearchView, self).get_queryset()
name = self.request.GET.get('name', '')
return qs.filter(name__contains=name)
更好的解决方案是使用TemplateView
或ListView
您的示例中甚至没有使用MultipleObjectMixin
下面是一个示例,其中只有一个模板视图
,没有分页
class SearchView(TemplateView):
template_name = 'search_results.thml'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
name = self.request.GET.get('name', '')
products = Product.objects.filter(name__contains=name)
context['main_list'] = products
context['category_list'] = Category.objects.all()
context['name'] = name
context['matches'] = products.count()
return context
下面是一个带有列表视图的示例,我建议使用它,因为它使用了多对象mixin
,但为您节省了一些工作
class SearchView(ListView):
template_name = 'search_results.html'
model = Product
context_object_name = 'main_list'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
context['category_list'] = Category.objects.all()
context['name'] = self.request.GET.get('name', '')
context['matches'] = self.get_queryset().count()
return context
def get_queryset(self):
qs = super(SearchView, self).get_queryset()
name = self.request.GET.get('name', '')
return qs.filter(name__contains=name)
您甚至可以更进一步,创建一个CategoryMixin
,这样您就可以在其他视图中继承它,这样您就可以添加它以获得类别列表
class CategoryMixin(object):
def get_context_data(self, **kwargs):
context['category_list'] = Category.objects.all()
return context
class SearchView(CategoryMixin, ListView):
template_name = 'search_results.html'
model = Product
context_object_name = 'main_list'
def get_context_data(self, **kwargs):
context = super(SearchView, self).get_context_data(**kwargs)
context['name'] = self.request.GET.get('name', '')
context['matches'] = self.get_queryset().count()
return context
def get_queryset(self):
qs = super(SearchView, self).get_queryset()
name = self.request.GET.get('name', '')
return qs.filter(name__contains=name)
非常感谢你!我通常使用ListView,但表单get请求把我弄糊涂了!非常感谢你!我通常使用ListView,但表单get请求把我弄糊涂了!非常感谢你!我通常使用ListView,但表单get请求把我弄糊涂了!非常感谢你!我通常使用ListView,但表单get请求把我弄糊涂了!