问题:
如果判断一个form实例中有没有数据?
bug方法:
通过form实例的is_valid()方法来验证
1、Form类的定义
class YourName(Form): your_name = CharField(max_length=10)
2、template直接渲染的上下文中的msg变量
{% extends 'learning/index.html' %} {% block container %} {{ msg }} {% endblock %}
3、view中的代码
def show_messsage(request): f = YourName() return render(request,'learning/message.html',context={'msg':"the form has data = {0}".format(f.is_valid())})
查看效果
可以看到页面中显示的是“the form has data = False” 看起来好像是判断正确了、但是问题并没有结束;这个“False”
只是一个巧合。
我们把代码改一下用来模拟一下用户的提交,假设用户提交了“12345678901234” 注意这里有14个字符。
可以看到数据是有的、可能通过is_valid()是分辨不出来的。
正确的做法:
1、通过form对象的is_bound属性来分辨form中是否有数据
def show_messsage(request): data={'your_name':'12345678901234'} f = YourName(data) return render(request,'learning/message.html',context={'msg':"the form has data = {0}".format(f.is_bound)})
is_bound 当form对象中有数据时能正确判断数据是有的、而这个有与数据是否能通过校验无关。
2、通过一个没有数据的form实例测试is_bound的效果
def show_messsage(request): f = YourName() return render(request,'learning/message.html',context={'msg':"the form has data = {0}".format(f.is_bound)})
总结:
form对象的is_bound用于测试form中有没有数据、它并不关心数据能不能通过校验。
-----------------------------------------------------------------------------------------------