django模板和request.GET参数处理问题(求助)

shandyli 2016-11-30 03:34:44
各位,新学习python和django。遇到问题求助。
python:2.7.2
django:1.9.4
模板:
<form method="get" action=".">
<tr><td>
<select name="Aid" id="Aid">
<option value="">请选择</option>
{% for AA in Aname %}
<option value="{{ AA.Aid }}">{{ AA.aname }}</option>
{% endfor %}
</select>
</td>
<td>
<select name="Bid" id="Bid">
<option value="">请选择</option>
{% for BB in Bname %}
<option value="{{ BB.Bid }}">{{ BB.bname }}</option>
{% endfor %}
</select>
</td>
<td>
<select name="Cid" id="Cid">
<option value="">请选择</option>
{% for CC in Cname %}
<option value="{{ CC.Cid }}">{{ CC.cname }}</option>
{% endfor %}
</select>
</td>
<td> </td><td><input type="submit" value="Submit"></td>
</tr>
</form>


views.py:
def getKwargs(data={}):
kwargs = {}
for (k,v) in data.items():
if v is not None and v != u'':
kwargs[k] = v
return kwargs


def testlist(request):
kwargs = {}
if request.method == 'GET':
qy = getKwargs(request.GET)
qfilter = Test.object.all()
if kwargs is not None:
qfilter = qfilter.filter(**kwargs)

这样方式,在有GET参数传过来时,不能按需要过滤出想要的数据。
尝试打印request.GET参数,如QueryDict: {u'Aid': [u''], u'Bid': [u'59'], u'Cid': [u'']}
实际想要的效果是Bid=59时,传给filter。


但直
Aid = request.GET.get("Aid")
if Aid is not None and Aid != u'':
kwargs['Aid'] = Aid
if Bid is not None and Bid != u'':
kwargs['Bid'] = Bid
这样再把kwargs传给filter就能得出想要的数据。

不知道哪里出了问题,请高手指教。谢谢
...全文
1024 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shandyli 2017-01-04
  • 打赏
  • 举报
回复
感谢@IamNieo,@georgema1982,用FORM方式解决了。
shandyli 2016-12-02
  • 打赏
  • 举报
回复
@georgema1982,是显示出了所有数据 就是下面这函数没生效 def getKwargs(data={}): kwargs = {} for (k,v) in data.items(): if v is not None and v != u'': kwargs[k] = v return kwargs 处理GET数据,是因为<form method="get" action=".">这里用的Get,至于你说的form,没弄懂。
nieoding 2016-12-02
  • 打赏
  • 举报
回复
代码肉眼看没啥问题,可以自行打印kwargs排查。 至于上面说的form,是指django有表单提交的页面,官方推荐是使用form来做,看官方文档就好了 https://docs.djangoproject.com/en/1.10/topics/forms/
georgema1982 2016-12-02
  • 打赏
  • 举报
回复
首先你的问题很含糊,什么叫“不能按需要过滤出想要的数据”?现在的现象是什么?显示出了所有数据还是显示出了错误的数据? 其次,你为什么要直接处理GET里的数据?为什么不用form?
shandyli 2016-11-30
  • 打赏
  • 举报
回复
@lamNieo:不好意思,拷过来怎么错了一个。 实际也是如下的 def testlist(request): kwargs = {} if request.method == 'GET': kwargs = getKwargs(request.GET) qfilter = Test.object.all() if kwargs is not None: qfilter = qfilter.filter(**kwargs)
nieoding 2016-11-30
  • 打赏
  • 举报
回复
qy在后面并没有使用

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧