问题描述
我试图将associated_portfolios字段对象过滤为仅由用户创建的那些对象。在尝试添加分页之前哪个方法可行(如果删除当前为associated_portfolios使用的过滤器,则该方法有效)
def associated_portfolios
这是因为新设置似乎没有超出请求。相反,我应该使用此方法https://django-filter.readthedocs.io/en/stable/guide/usage.html#filtering-the-primary-qs
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']
filters.py 基于文档的可能解决方案
class TradeFilter(django_filters.FilterSet):
date_range = django_filters.DateFromToRangeFilter(label='Date Range','associated_portfolios']
@property
def qs(self):
parent = super().qs
user = getattr(self.request,'user',None)
return parent.filter(user=user)
问题是没有错误消息,但仍显示不是由用户创建的对象。从我在SOF和文档中看到的@property尝试了十几种变体,但还没有成功。
views.py
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'
旁注:
- 我使用其他视图设置的原因是由于分页,我遵循本指南使用django-filters设置分页。 https://www.caktusgroup.com/blog/2018/10/18/filtering-and-pagination-django/
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)