Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用基于Django类的视图进行筛选和分页_Python_Django_View_Pagination_Django Filter - Fatal编程技术网

Python 使用基于Django类的视图进行筛选和分页

Python 使用基于Django类的视图进行筛选和分页,python,django,view,pagination,django-filter,Python,Django,View,Pagination,Django Filter,希望将分页添加到我的视图中,使用-令我惊讶的是,我在这个文档丰富的包中没有找到关于分页的文档(这似乎非常常见)。然而,我确实在这个主题上发现了几个问题,但没有一个问题有明确的解决方案,更不用说基于类的观点了 我正在密切关注本指南,但目前仍处于停滞状态(下面是错误消息) url.py path('trade/', TradeFilteredListView.as_view(), name="trade-list"), def associated_portfolios

希望将分页添加到我的视图中,使用-令我惊讶的是,我在这个文档丰富的包中没有找到关于分页的文档(这似乎非常常见)。然而,我确实在这个主题上发现了几个问题,但没有一个问题有明确的解决方案,更不用说基于类的观点了

  • 我正在密切关注本指南,但目前仍处于停滞状态(下面是错误消息)

    url.py

    path('trade/', TradeFilteredListView.as_view(), name="trade-list"),
    
    def associated_portfolios(request):
        associated_portfolios = Portfolio.objects.filter(user=request.user)
        return associated_portfolios.all()
    
    class TradeFilter(django_filters.FilterSet):
        associated_portfolios = django_filters.ModelMultipleChoiceFilter(queryset=associated_portfolios)
        date_range = django_filters.DateFromToRangeFilter(label='Date Range', field_name='last_entry',
                                                          widget=RangeWidget(attrs={'type': 'date'}))
        
        class Meta:
            model = Trade
            fields = ['status', 'type', 'asset', 'symbol', 'broker', 'patterns', 'associated_portfolios']
    
    class FilteredListView(ListView):
        filterset_class = None
    
        def get_queryset(self):
            # Get the queryset however you usually would.  For example:
            queryset = super().get_queryset()
            # Then use the query parameters and the queryset to
            # instantiate a filterset and save it as an attribute
            # on the view instance for later.
            self.filterset = self.filterset_class(self.request.GET, queryset=queryset)
            # Return the filtered queryset
            return self.filterset.qs.distinct() #.filter(user=self.request.user).order_by('last_entry')
    
        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            # Pass the filterset to the template - it provides the form.
            context['filterset'] = self.filterset_class
            return context
    
    # Attempt @ Combining Filter and List View to get: TradeFilteredListView
    class TradeFilteredListView(FilteredListView):
        model = Trade
        filterset_class = TradeFilter
        paginate_by =  5
        template_name = 'portfolios/trade_filter.html'
    
    过滤器.py

    path('trade/', TradeFilteredListView.as_view(), name="trade-list"),
    
    def associated_portfolios(request):
        associated_portfolios = Portfolio.objects.filter(user=request.user)
        return associated_portfolios.all()
    
    class TradeFilter(django_filters.FilterSet):
        associated_portfolios = django_filters.ModelMultipleChoiceFilter(queryset=associated_portfolios)
        date_range = django_filters.DateFromToRangeFilter(label='Date Range', field_name='last_entry',
                                                          widget=RangeWidget(attrs={'type': 'date'}))
        
        class Meta:
            model = Trade
            fields = ['status', 'type', 'asset', 'symbol', 'broker', 'patterns', 'associated_portfolios']
    
    class FilteredListView(ListView):
        filterset_class = None
    
        def get_queryset(self):
            # Get the queryset however you usually would.  For example:
            queryset = super().get_queryset()
            # Then use the query parameters and the queryset to
            # instantiate a filterset and save it as an attribute
            # on the view instance for later.
            self.filterset = self.filterset_class(self.request.GET, queryset=queryset)
            # Return the filtered queryset
            return self.filterset.qs.distinct() #.filter(user=self.request.user).order_by('last_entry')
    
        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            # Pass the filterset to the template - it provides the form.
            context['filterset'] = self.filterset_class
            return context
    
    # Attempt @ Combining Filter and List View to get: TradeFilteredListView
    class TradeFilteredListView(FilteredListView):
        model = Trade
        filterset_class = TradeFilter
        paginate_by =  5
        template_name = 'portfolios/trade_filter.html'
    
    视图.py

    path('trade/', TradeFilteredListView.as_view(), name="trade-list"),
    
    def associated_portfolios(request):
        associated_portfolios = Portfolio.objects.filter(user=request.user)
        return associated_portfolios.all()
    
    class TradeFilter(django_filters.FilterSet):
        associated_portfolios = django_filters.ModelMultipleChoiceFilter(queryset=associated_portfolios)
        date_range = django_filters.DateFromToRangeFilter(label='Date Range', field_name='last_entry',
                                                          widget=RangeWidget(attrs={'type': 'date'}))
        
        class Meta:
            model = Trade
            fields = ['status', 'type', 'asset', 'symbol', 'broker', 'patterns', 'associated_portfolios']
    
    class FilteredListView(ListView):
        filterset_class = None
    
        def get_queryset(self):
            # Get the queryset however you usually would.  For example:
            queryset = super().get_queryset()
            # Then use the query parameters and the queryset to
            # instantiate a filterset and save it as an attribute
            # on the view instance for later.
            self.filterset = self.filterset_class(self.request.GET, queryset=queryset)
            # Return the filtered queryset
            return self.filterset.qs.distinct() #.filter(user=self.request.user).order_by('last_entry')
    
        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            # Pass the filterset to the template - it provides the form.
            context['filterset'] = self.filterset_class
            return context
    
    # Attempt @ Combining Filter and List View to get: TradeFilteredListView
    class TradeFilteredListView(FilteredListView):
        model = Trade
        filterset_class = TradeFilter
        paginate_by =  5
        template_name = 'portfolios/trade_filter.html'
    
    错误

  • TradeFilter中关联的_公文包(在正常FilterView中工作)错误消息:

    AttributeError:“非类型”对象没有属性“用户”

  • 在我的工作FilterView中,我正在筛选用户并按最后一个条目排序。如何在新的FilteredListView中实现这一点

  • 将其附加到

        context['filterset'] = self.filterset_class
    
    看来

        context['filterset'] = self.filterset_class.filter(user=self.request.user).order_by('last_entry')
    
    给出此错误:

    type object 'TradeFilter' has no attribute 'filter'
    

    旁注

    这是我的工作过滤器视图,我现在正试图对其进行分页

    class TradeFilterView(LoginRequiredMixin, FilterView):
        model =  Trade
        filterset_class = TradeFilter
        paginate_by =  5
    
        def get_queryset(self):
            return Trade.objects.filter(user=self.request.user).order_by('last_entry')
    

    你找到答案了吗?我有同样的问题。