2007-12-05
django preview form 的一个问题
关键字: 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按钮
当然也有可能是我的错误如果哪位同学也碰到,回下贴哈
Django 在使用 preview form 处理BooleanField 时,如果BooleanField的值False,那么当你提交时,Django会把 BooleanField的值改为True,然后返回本页面...但如果BooleanField值为True的话,Django 会让你顺利执行...
示例程序...
1. Is test 没有选中
2. 我点击了Preview按钮
3.我点击了submit按钮,注意红笔...
4.我点击了Preview按钮,显示仍与上图一样...
5.我再一次点击了submit按钮
评论
yimogod
2007-12-14
呵呵,谢谢大家...这个bug很容易遇到的.我想应该已经有人提交过了...
guotie
2007-12-13
newforms的确存在比较多的问题
jjx
2007-12-06
这个问题得确是django的 bug
问题在于django 总是将BooleanField的值处理成True,False,但有个地方存在不一致的地方,就是
CheckboxInput的value_form_datadict方法
这个方法会导致一些错误,因为 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团队来处理这个问题)
由于存在这两个问题,因此光传入一个check_test lambda 还不足以解决问题,我一开始就以为这个能解决,呵呵
问题在于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 还不足以解决问题,我一开始就以为这个能解决,呵呵
zbird
2007-12-05
如果你不选择,request里是没有值的。
估计你用的是 if request.POST。
因此根本就没有执行if里面的操作。
估计你用的是 if request.POST。
因此根本就没有执行if里面的操作。
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 10234 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
链接
最新评论
-
Flex创建一个UI component ...
我一般的习惯介绍怎么做,就来一段代码将,这样估计容易理解,不知道flex的程序员 ...
-- by javaeyename -
flex collection 的特征
呵呵,受教了。针对引用而非collection 作为dataprovider 时 ...
-- by yimogod -
flex collection 的特征
Array是As3的基本类型,不支持事件,所以无法进行数据绑定。Collecti ...
-- by ltian -
Flex创建一个UI component ...
这么一些清晰很多, 强烈要求LZ画个图出来!!
-- by bruce.peng -
pyamf小实例
设计是网上找素材改的功能还一直在写,暂时只是一个页面
-- by yimogod






评论排行榜