Django的ListView - 表单进行过滤和排序 [英] Django ListView - Form to filter and sort
问题描述
- 一个网站,列出我所有的更新(模型) >
- 不要一次显示所有模型(分页 - 可能每页10个)
- 过滤和排序列表
我的想法 我的问题 我不确定如何添加表单来修改我的QuerySet与筛选器和分类。我的想法是通过额外的过滤器和order_by修改get_queryset中的查询。 我的视图 我的想法 类似这样的。我知道这不是像这样工作...只是为了说明 您不需要发布。传递过滤器的值和order_by在url中,例如: 并获取get_queryset中的过滤器和orderby: 确保你给出正确的默认值来过滤和排序 示例表单(可以根据需要进行修改): My Goal My thoughts My Problem I am not sure how to add an form to modify my QuerySet with filter and sortings. My Idea was to modify the Query in get_queryset with additional filter and order_by. My View My Idea Something like this. I know it's not working like this ... just to illustrate
You don't need post. Pass the filter value and order_by in the url for example: and get the filter and orderby in the get_queryset like: Make sure you give proper default value to filter and orderby Example form (you can modify this to your need):
这篇关于Django的ListView - 表单进行过滤和排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
class MyView(ListView):
model =更新
template_name =updates / update.html
paginate_by = 10
def get_queryset(self):
return Update.objects.filter(
〜Q(state = Update.STATE_REJECTED),
〜Q(state = Update.STATE_CANCELED),
〜Q(state = Update.STATE_FINISHED),
).order_by(
'planned_release_date'
)
$ b $ pre $ class $ MyView(ListView)
model =
template_name =updates / update.html
paginate_by = 10
$ b $ def post(self,request,* args,** kwargs):
new_context = .objects.filter(
request.POST.get(filter),
).order_by(
request.POST.get(sorting),
)
$ b $ def get_queryset(self):
return Update.objects.filter(
〜Q(state = Update.STATE_REJECTED),
〜Q(state = Update.STATE_CANCELED) ,
〜Q(state = Update.STATE_FINISHED),
).order_by(
'planned_release_date'
)
$ b $ p $ update $ list / filter = filter-val& orderby = order-val
class MyView(ListView):
model = Update
template_name =updates / update.html
paginate_by = 10
def get_queryset(self):
filter_val = self.request.GET.get('filter','give-default-value')
order = self.request.GET.get('orderby' ,'give-default-value')
new_context = Update.objects.filter(
state = filter_val,
).order_by(order)
return new_context
def get_context_data(self,** kwargs):
context = super(MyView,self).get_context_data(** kwargs)
context ['filter'] = self.request.GET.get ('filter','give-default-value')
context ['orderby'] = self.request.G ET.get('orderby','give-default-value')
返回上下文
< form method =getaction ={%url'update-list'%}>
< p>过滤器:< input type =textvalue = {{filter}} name =filter/>< / p>
< p> order_by:< input type =textvalue = {{orderby}} name =orderby/>< / p>
< p>< input type =submitname =submitvalue =submit/>< / p>
< / form>
class MyView(ListView):
model = Update
template_name = "updates/update.html"
paginate_by = 10
def get_queryset(self):
return Update.objects.filter(
~Q(state=Update.STATE_REJECTED),
~Q(state=Update.STATE_CANCELED),
~Q(state=Update.STATE_FINISHED),
).order_by(
'planned_release_date'
)
class MyView(ListView):
model = Update
template_name = "updates/update.html"
paginate_by = 10
def post(self, request, *args, **kwargs):
new_context = Update.objects.filter(
request.POST.get("filter"),
).order_by(
request.POST.get("sorting"),
)
def get_queryset(self):
return Update.objects.filter(
~Q(state=Update.STATE_REJECTED),
~Q(state=Update.STATE_CANCELED),
~Q(state=Update.STATE_FINISHED),
).order_by(
'planned_release_date'
)
.../update/list/?filter=filter-val&orderby=order-val
class MyView(ListView):
model = Update
template_name = "updates/update.html"
paginate_by = 10
def get_queryset(self):
filter_val = self.request.GET.get('filter', 'give-default-value')
order = self.request.GET.get('orderby', 'give-default-value')
new_context = Update.objects.filter(
state=filter_val,
).order_by(order)
return new_context
def get_context_data(self, **kwargs):
context = super(MyView, self).get_context_data(**kwargs)
context['filter'] = self.request.GET.get('filter', 'give-default-value')
context['orderby'] = self.request.GET.get('orderby', 'give-default-value')
return context
<form method="get" action="{% url 'update-list' %}">
<p>Filter: <input type="text" value={{filter}} name="filter"/></p>
<p>order_by: <input type="text" value={{orderby}} name="orderby"/></p>
<p><input type="submit" name="submit" value="submit"/></p>
</form>