django使用get方法混合多个对象

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

也许有人知道,在我的视图中,我可以使用多个对象混合和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__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请求把我弄糊涂了!