使用clean()方法在django中的form.py中访问未清理的表单数据

时间:2014-11-23 03:11:25

标签: django django-forms

我的问题可能没有清除。所以请也请阅读示例。我正在使用python 3.4和django 1.7

我从表单选择字段中收到外键。未清理的数据给了我外来元素的id,但是清理后的数据给了我 str (),即外来元素的名称。

我希望外部元素的对象通过与表单的另一个清理数据进行比较来验证其另一个属性。

例如,我有一个包含private_key(CharField)的Institute模型。 现在,我有一个教师模型,其中包含Institute as ForeignKey,需要在注册时验证private_key。

注意:private_key是CharField类型的变量名称

在为教师注册的表格中,学院作为ForeignKey以及包含用户给出的private_key输入的Charfield来。

我必须检查用户的private_key输入和private_key是否存储在所选的Institute模型中。如果它们不相同则会引发“无效私钥”错误。

我在form.py中使用了clean()方法(在我自定义注册表单的类中)。但在那里,我只清理了数据。干净的数据给了我学院的名称而不是学院的名称。

怎么办?

如果我的问题不好,请用理由回答/评论,而不是仅仅发出声音。

1 个答案:

答案 0 :(得分:0)

如果使用ModelForm,则应直接获取外键关联的对象。因此,您可以在清理数据中执行的操作是:

def clean(self):
    p_key= self.cleaned_data['private_key']
    institute= self.cleaned_data['institute']
    if p_key == institute.private_key :
        return super().clean()
    else:
        raise ValidationError('Invalid key')

如果您使用的是Form,那么您应该在清理过的数据中获得机构ID。