我正在尝试使用Eclipse / Pydev逐步完成django中表单验证的整个过程。我得到了一个完全出乎意料的结果。
parent_form = form_class(request.POST, initial=initial)
debug_type = type(parent_form._errors)
msg = _('created successfully') # <------- Set breakpoint here
这是我在控制台中探索的结果。
debug_type
<type 'NoneType'>
type(parent_form._errors)
<class 'django.forms.util.ErrorDict'>
我不明白为什么这两个值不同;第一个值应该是“正确的”。
在django源代码中,存在一些名为parent_form.errors(注意错误前缺少前导下划线),这是parent_form的一个属性;获取该属性会运行一些代码,这些代码会导致_errors从None转到ErrorDict。但是我不得到parent_form.errors,我要求parent_form._errors。
可能是PyDev在没有要求的情况下评估parent_form.errors吗?如果是这样的话?为什么我不能通过在parent_form.errors的getter中设置断点来捕获这个静默评估?
答案 0 :(得分:2)
当你点击断点并且PyDev填充变量视图(你可以看到每个变量的值)时,它会对范围内的所有变量执行dir(),并为每个变量执行getattr()发现变量(这对调试器的作用有点简化,但它接近它)...
所以,它无法猜测某个变量是否会产生一些副作用......您可以尝试关闭变量视图以检查它是否仅在实际请求变量时才会这样做(尽管它可能是它要求一些东西,即使它已经关闭,也不确定。)