我有两张表格
第一个提交到数据库。工作完美。 第二种检索数据库信息,也可以正常工作
然而,我在表单中有一些过滤器工作得并不完美
我有几个过滤器
如果设置了所有过滤器,它们将正常工作
如果只设置了一个,则它们不起作用。我不明白为什么会这样
forms.py(筛选表单):
class OvertimeForm(forms.ModelForm):
location = forms.ModelChoiceField(
queryset=Location.objects.all(),
empty_label="All Locations",
widget=forms.Select(attrs={'class': 'form-control'}))
overtime_type = forms.ModelChoiceField(
queryset=overtimeTypes.objects.all(),
empty_label='All Types',
widget=forms.Select(attrs={'class': 'form-control'}))
dateStart = forms.DateField(
widget=forms.DateInput(attrs={'class':'datepicker'}))
dateEnd = forms.DateField(
widget=forms.DateInput(attrs={'class':'datepicker'}))
class Meta:
model = Overtime
fields = ['location']
fields = ['overtime_type']
field = ['dateStart']
field = ['dateEnd']
views.py(筛选表单):
def Overtime_Results(request):
userGroup = request.user.groups.get(name__in=['Comp1' ,'Comp2' , 'Comp3' , 'Comp4'])
overtime_data = Overtime.objects.filter(client__name=userGroup)
location = None
overtime_type = None
dateStart = date.today()
dateEnd = date.today()
if request.method == 'POST':
form = OvertimeForm(data=request.POST)
if form.is_valid():
location = form.data['location']
dateStart = form.data['dateStart']
dateEnd = form.data['dateEnd']
overtime_type = form.data['overtime_type']
#This is where I think the problem is, something here isn't correct.
overtime_data = Overtime.objects.filter(location=location, overtime_type=overtime_type, overtimeDateStart__range=(dateStart, dateEnd), client__name=userGroup)
return response
else:
form = OvertimeForm()
template_name = "overtime/Overtime_Results.html"
context = {
'form': form,
'location': location,
'overtime_type': overtime_type,
'overtime_data': overtime_data,
}
return render(request, template_name, context)
在html文件中:
<div class="col-md-3">{{ form.location }}
{{ form.dateStart }} <p>To</p>
{{ form.dateEnd }}
{{ form.overtime_type }}
</div>
这是表单的外观:http://imgur.com/NFWU9ke
你应该用你真正关心的过滤器来建立你的查询,分割查询集的创建,这仍然只会导致对数据库的一次调用,它只是更干净而已
您还使用了
form.data
而不是cleaned_data
,这意味着您没有使用经过验证的数据相关问题 更多 >
编程相关推荐