标签:city 在线 lib mymooc home 筛选 peter id 符合条件
筛选每个城市的培训机构
在前端界面上按照城市的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> |
标签:city,在线,lib,mymooc,home,筛选,peter,id,符合条件 来源: https://www.cnblogs.com/sanxiandoupi/p/11718115.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。