自己写一个在线学习网站记录之按照不同的筛选条件筛选符合条件的数据并显示

筛选每个城市的培训机构

在前端界面上按照城市的id来显示城市的信息。

123
{% for city in all_cities %}    <a href="?city={{ city.id }}"><span class="">{{ city.name }}</span></a>{% endfor %}

在views(视图函数)中我们根据条件进一步筛选。

这里有一个小常识。比如我们在在定义培训机构的model的时候,有一个外键,我们虽然传入的字段名称是city,但是在数据库中实际存储的字段名称是city_id, 这样就给我们使用数据带来极大的方便。

12345
# 取出筛选的城市city_id = request.GET.get('city', '')if city_id:    all_orgs = all_orgs.filter(city_id)

这里刚刚出现了报错,说参数错误:

12345678910111213141516171819202122
Request Method:	GETRequest URL:	http://localhost:8000/org_list/?city=1Django Version:	1.9Exception Type:	ValueErrorException Value:	not enough values to unpack (expected 2, got 1)Exception Location:	/home/peter/mymooc/mymoocvenv/lib/python3.5/site-packages/django/db/models/sql/query.py in build_filter, line 1146Python Executable:	/home/peter/mymooc/mymoocvenv/bin/pythonPython Version:	3.5.2Python Path:	['/home/peter/mymooc/apps', '/home/peter/mymooc', '/root/.venvburrito/lib/python2.7/site-packages', '/root/.venvburrito/lib/python2.7/site-packages/setuptools-28.8.0-py2.7.egg', '/root/.venvburrito/lib/python2.7/site-packages/pip-9.0.1-py2.7.egg', '/home/peter/mymooc/mymoocvenv/lib/python35.zip', '/home/peter/mymooc/mymoocvenv/lib/python3.5', '/home/peter/mymooc/mymoocvenv/lib/python3.5/plat-x86_64-linux-gnu', '/home/peter/mymooc/mymoocvenv/lib/python3.5/lib-dynload', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/home/peter/mymooc/mymoocvenv/lib/python3.5/site-packages']

修改如下:

12
if city_id:    all_orgs = all_orgs.filter(city_id=int(city_id))

ok,因为city_id在数据库中也是以整形数的形式存储的,也就是int类型的。而从前端页面传过来的的city_id是字符串类型的,所以需要强制转换成整形数,才能正确的找到要筛选的数据。

附上filter的源码:

123456
def filter(self, *args, **kwargs):    """    Returns a new QuerySet instance with the args ANDed to the existing    set.    """    return self._filter_or_exclude(False, *args, **kwargs)

我们继续做选中状态的处理,如果当前的city的id和后端传过来的city的ID一样,那么就把当前的city设置成选中的状态。

这里总结的点就是每一个链接都要有一个合理的值,这个值可以是后台传过来的东西。

1234567891011
<h2>机构类别</h2>	<div class="cont">        <a href="?city={{ city.id }}"><span class="{% ifequal category '' %}active2{% endifequal %}">全部</span></a>大专栏
上一篇:【Spring全家桶系列超全整理之SpringBoot框架】9 SpringBoot整合elasticsearch检索功能


下一篇:访问器属性描述符