0

clean()我创建了一个具有自定义方法的模型表单。但是这种clean()方法不再起作用,因为我从该模型表单中创建了一个表单集,因为它无法在QueryDict. 那么现在该怎么做才能让它工作(在表单集 QueryDict 中找到与该表单相关的数据)?

这是会员表格:

class option_form(ModelForm):
    class Meta:
        model = option
        exclude = ('warval','user')

    def clean_value(self):
        self.data = self.data.copy()
        print(self.data)
        if self.data['value']=='lol@lol.co':
            raise forms.ValidationError("This can't be your email address")

        return self.data['value']

这是错误:

Exception Type: MultiValueDictKeyError
Exception Value: "Key 'value' not found in <QueryDict: {u'form-1-value': [u''], u'form-INITIAL_FORMS': [u'1'], u'form-TOTAL_FORMS': [u'2'], u'form-MAX_NUM_FORMS': [u''], u'form-0-id': [u'1'], u'form-1-id': [u''], u'csrfmiddlewaretoken': [u'e645de635fe47559ac540eb32ea4d08d'], u'form-0-value': [u'lol@lol.co']}>" 
4

1 回答 1

2

在您的clean_value方法中,您应该从self.cleaned_data而不是获取值self.data。有关示例,请参阅有关清理特定字段属性的文档。

self.data是您初始化表单时使用的原始 POST 或 GET 数据。它不包含名为 的键value,因为键的前缀form-0-.

尝试将您的清洁方法更改为以下内容:

def clean_value(self):
    value = self.cleaned_data['value']
    if value == 'lol@lol.co':
        raise forms.ValidationError("This can't be your email address")
    return value
于 2012-07-24T12:26:33.153 回答