Django:覆盖ForeignKey字段上的to_python()以及验证表单时在clean_ <fieldname>之前调用的其他方法?</fieldname>

时间:2010-01-29 17:27:14

标签: django django-models django-forms

我正在尝试解决this question中概述的问题。目前看来我必须覆盖ForeignKey字段上的to_python()方法。但就我在django的源代码中所看到的,ForeignKey类实际上并没有声明一个to_python()方法,所以它必须从Field类继承它,这意味着它看起来像这样:

def to_python(self, value):
        """
        Converts the input value into the expected Python data type, raising
        django.core.exceptions.ValidationError if the data can't be converted.
        Returns the converted value. Subclasses should override this.
        """
        return value

只有那不可能......这意味着它不会抛出ValidationError。但肯定有些东西必须抛弃它...我的意思是将id转换为对象必须在某处发生,当然如果id不正确,将抛出ValidationError? 或者也许正确的问题是在表单上的clean _ <fieldname>()方法之前调用其他方法是什么?我可以覆盖以下哪一项?

1 个答案:

答案 0 :(得分:1)

在类型不同的情况下,

to_python用于将项目从数据库值转换为Python值。但是外键字段实际上只是一个整数 - 相关对象的ID。所以没有必要转换,因此空方法。实际获取/显示相关对象是通过描述符完成的。

但是,我不知道为什么你认为你需要覆盖ForeignKey上的to_python。这与您在链接问题中提到的问题没有任何关系,即在链接之前必须创建对象。最好用表单的干净方法完成,我会在那里添加一个答案。