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'
错误
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')
你找到答案了吗?我有同样的问题。