<p>如果我理解正确,FinalView应该只过滤GET参数?在</p>
<p>如果是这样的话,你真的需要表格吗?你好像想说“没有对应的数据存在!”如果没有结果?
通用Listview自动填充self.object_列表(或上下文对象名称)来自get_queryset,因此是一个简单的check对象_列表。存在消息模板()中的消息应足以呈现错误代码。。。在</p>
<p>为了做一个简单的过滤器,我将提供一个我通常在您的示例中使用的技术示例:</p>
<pre><code>class FinalView(ListView):
def get_queryset(self):
qs = super(FinalView, self).get_queryset()
filter_fields = ('department', 'person') # the fields to filter on
query_dict = {} # filter query
for param in self.request.GET: # iterate all params
if param in filter_fields: # is param a filter we want to use?
value = self.request.GET.get(param)
if value: # Have value? otherwise ignore
query_dict[param] = value
return qs.filter(**query_dict) # Execute filter
def get_context_data(self, **kwargs):
kwargs = super(FinalView, self).get_context_data(**kwargs)
if self.object_list.exists(): # Did we get objects? (this can also be done directly in template)
kwargs['error_msg'] = 'no corresponing data exist!'
else:
kwargs["sales"] = self.object_list.aggregate(Sum('sales'))
# Re-populate form if we want that
kwargs['form'] = InputForm(initial=self.request.GET)
return kwargs
</code></pre>
<p>不知道它是否符合你的要求。但这是另一种解决办法。在</p>
<p><strong>django形式的精化:</strong>
django中的表单用于验证输入数据并从字段中创建适当的python类型。(即IntegerField将是整数等)。<a href="https://docs.djangoproject.com/en/1.8/topics/forms/#django-s-role-in-forms" rel="nofollow">Roles for forms</a></p>
<p>在本例中,数据用于过滤查询集。数据本身是有效的,但不是使用数据的结果。在</p>
<p>ListView和窗体的“角色”很重要:
视图过滤查询集,django表单验证输入数据。在</p>
<p>如果我们在执行过滤器后对结果不满意,视图应该处理,如果输入数据不好,django表单应该处理。(即格式错误,空字段或部门不能为空,如果人员已填充等)。在</p>
<p>根据这个问题,我们知道FinalView的输入将是字符串或空的。(在self.request.GET总是字符串或空),这里需要django表单可能会使事情复杂化?在</p>