私信  •  关注

SUTerliakov

SUTerliakov 最近创建的主题
SUTerliakov 最近回复了
3 年前
回复了 SUTerliakov 创建的主题 » Django如何使用函数return设置基于类的视图查询集

首先——为什么你的代码失败。你超越 get_context_data ,然后对其进行无效调用(您没有通过 self 最后,所有这些都发生在类创建期间,而不是实例化期间,所以 获取上下文数据 当你在最后一行打电话时,他不知道你的请求。和 context_data 这和 queryset .以下是您可以做的,以获得的分页内容 filtered queryset:

class ProductsView(ListView):
    paginate_by = 20
    context_object_name = 'filtered'
    template_name = 'urunler.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context.update({
            'renkler': Renk.objects.all(),
            'bedenler': Varyasyon.objects.all(),
            'katagoriler': Grub.objects.all(),
            'checkedvar':  self.request.GET.getlist('varyasyon_id__in'),
            'checkedrenk': self.request.GET.getlist('renk_id__in'),
            'checkedkat': self.request.GET.getlist('grub_id__in'),
        })
        return context

    def get_queryset(self):
        filtered = Stok.objects.all().order_by('-urun_id__kayit_tarihi','foto').distinct('urun_id__kayit_tarihi','foto')
        
        checked_var = self.request.GET.getlist('varyasyon_id__in')
        checked_renk = self.request.GET.getlist('renk_id__in')
        checked_kat = self.request.GET.getlist('grub_id__in')
        if checked_var:
            filtered = filtered.filter(varyasyon_id__in=checked_var)
        if checked_renk:
            filtered = filtered.filter(renk_id__in=checked_renk)
        if checked_cat:
            filtered = filtered.filter(grub_id__in=checked_cat)
        
        filtered = filtered.filter(urun_id__yayin=True, stok_adet__gt=0)
        order = self.request.GET.get('order')
        if order == "sale":
            filtered = filtered.filter(indirim=True)
        elif order == "tesettur":
            filtered = filtered.filter(urun_id__tesettur=True)
        
        return filtered