浏览 735 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-12-05 关键字: django preview form
在用Django preview form 碰到一个问题...怀疑是Django 的bug
当然也有可能是我的错误如果哪位同学也碰到,回下贴哈 Django 在使用 preview form 处理BooleanField 时,如果BooleanField的值False,那么当你提交时,Django会把 BooleanField的值改为True,然后返回本页面...但如果BooleanField值为True的话,Django 会让你顺利执行... 示例程序... 1. Is test 没有选中
2. 我点击了Preview按钮
3.我点击了submit按钮,注意红笔...
4.我点击了Preview按钮,显示仍与上图一样... 5.我再一次点击了submit按钮
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2007-12-05
如果你不选择,request里是没有值的。
估计你用的是 if request.POST。 因此根本就没有执行if里面的操作。 |
|
| 返回顶楼 | |
|
时间:2007-12-06
这个问题得确是django的 bug
问题在于django 总是将BooleanField的值处理成True,False,但有个地方存在不一致的地方,就是 CheckboxInput的value_form_datadict方法
def value_from_datadict(self, data, files, name):
if name not in data:
# A missing value means False because HTML form submission does not
# send results for unselected checkboxes.
return False
return super(CheckboxInput, self).value_from_datadict(data, files, name)
这个方法会导致一些错误,因为 data是个字符串的词典,因此,这个方法会返回bool的False(当data中没有is_test时)或字符串的'False'(当存在,但值为False时) 第一个是hash 值的计算,一开始的bool类型的False同unicode字符串的False是不同 的. 这样会导致当不核选时需要提交两次 其次是当render的时候,可以查看CheckboxInput的render方法,里面有个check_test,默认被设置为bool,这样,当调用bool('False')时,返回的就是True了 所以,修改上面的方法(或继承新建一个Checkbox2Input),让其根据实际情况返回bool值就ok了 比方说(这只是个quick and dirty的解决方法,英语好的可以提交bug,让django团队来处理这个问题)
def value_from_datadict(self, data, files, name):
if name not in data:
# A missing value means False because HTML form submission does not
# send results for unselected checkboxes.
return False
#print data[name],"value_form_datadict",type(data[name])
result=super(CheckboxInput, self).value_from_datadict(data, files, name)
return True if result in ['on','ON','True','true'] else False
由于存在这两个问题,因此光传入一个check_test lambda 还不足以解决问题,我一开始就以为这个能解决,呵呵 |
|
| 返回顶楼 | |
|
时间:2007-12-13
newforms的确存在比较多的问题
|
|
| 返回顶楼 | |
|
时间:2007-12-14
呵呵,谢谢大家...这个bug很容易遇到的.我想应该已经有人提交过了...
|
|
| 返回顶楼 | |






