此帖已在以下某些评论后重写。
假设我创建了两个视图,“CheckInsListView”和“CheckOutsListView”。这些是在status =“CI”或status =“CO”上过滤的。
接下来就是我要显示用户指定日期的结果,所以我会创建一个表单“DateSelection”并使用“get_queryset”来匹配日期并显示结果。
我现在要做的是在会话中保存用户指定的日期。当我进入下一个视图“结账”时,我想使用会话中设置的日期再次用作过滤器。
除非用户输入新日期,否则会话中的日期应用作过滤器。
#views.py
class CheckInsListView(generic.ListView, FormMixin):
form_class = DateSelection
model = Delivery
paginate_by = 10
queryset = Delivery.objects.filter(status='CI')
template_name = 'check-ins.html'
def get_queryset(self):
checkin_date = super(CheckInsListView, self).get_queryset()
#Request date from session
date_session = self.request.session.get('date_session')
#Retrieve date from user input
date_user = self.request.GET.get("date_selection")
#check if session is populated
if date_session:
return checkin_date.filter(arrival_date__icontains=date_session)
#if session is not populated, retrieve date from user input
elif date_user:
return checkin_date.filter(arrival_date__icontains=date_user)
#register user input date_selection in session
request.session['date_session'] = 'date_user'
else:
return checkin_date
class CheckOutsListView(generic.ListView, FormMixin):
form_class = DateSelection
model = Orders
paginate_by = 10
queryset = Orders.objects.filter(status='CO')
template_name = 'check-outs.html'
表格
#forms.py
from django import forms
class DateSelection(forms.Form):
date_selection = forms.DateField(label="Date...")
我不确定这是否可行,如果有人能给我推进正确的方向呢?
编辑05/05/2017
尝试使用以下内容检索模板中的会话,因此我知道日期未保存在会话中。
{% if request.session.date_session %}
<h6>Date saved in session</h6>
{% endif %}