Django ModelForm没有调用干净

时间:2012-11-30 13:46:00

标签: python django eclipse

我正在执行基本的Django ModelForm创建/验证/保存操作。当在Eclipse调试器下运行代码时调用is_valid()并且在创建表单和调用is_valid()之后设置断点时,不会调用我的自定义清理方法。

我已经多次遍历Django基本代码,看起来ModelForm类上的错误字典从未设置为None,这会触发验证。我怀疑这是因为与调试器的交互访问ModelForm的_errors属性以显示在变量窗格中。

当我删除所有断点并让代码自然流动时,我可以通过发出print语句来证明自定义清理代码正在运行。

这是Django ModelForm设计中的一个缺陷,一个Eclipse问题还是我在错误的树上咆哮?

models.py

from django.db import models

class TestModel1(models.Model):
    field1 = models.CharField(max_length=45)
    field2 = models.IntegerField(default=2)
    field3 = models.CharField(max_length=45, null=True, blank=True)

forms.py

from order.models import TestModel1
from django.forms import ModelForm

class OrderTestForm(ModelForm):

    def clean_field1(self):
        return self.cleaned_data['field1']

    def clean_field2(self):
        return self.cleaned_data['field2']

    class Meta:
        model = TestModel1

我的测试工具:

from forms import OrderTestForm

row = {'field1': 'test value', 'field2': '4', }

ff = OrderTestForm(row)

#ff.full_clean()
if ff.is_valid():
    ff.save()
else:
    print ff.errors

3 个答案:

答案 0 :(得分:1)

如果你尝试怎么办?

from order.models import TestModel1
from django.forms import ModelForm

class OrderTestForm(ModelForm):
    class Meta:
        model = TestModel1

    def clean_field1(self):
        value = self.cleaned_data['field1']
        print value 
        return value

    def clean_field2(self):
        value = self.cleaned_data['field2']
        print value 
        return value

答案 1 :(得分:0)

我找到了“答案”,这是一种非答案。确切的用例是从客户那里接收CSV文件。在检查客户的实际数据文件后,数据字段用空格填充 - 许多空格。我修剪了输入并将修剪过的字典推入表格中,一切正常。仍然没有解释为什么eclipse会对此感到窒息。

答案 2 :(得分:0)

我遇到了同样的问题,并试图深入挖掘并调试框架。

常规表单和模型表单之间可能存在差异,导致这种情况无法正常工作,但这个hack(覆盖is_valid()而不是clean(...))对我有用:

def is_valid(self):
    #run whatever ModelForm validations you need
    return super(OrderTestForm, self).is_valid()