我正在尝试解决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>
()方法之前调用其他方法是什么?我可以覆盖以下哪一项?
答案 0 :(得分:1)
to_python
用于将项目从数据库值转换为Python值。但是外键字段实际上只是一个整数 - 相关对象的ID。所以没有必要转换,因此空方法。实际获取/显示相关对象是通过描述符完成的。
但是,我不知道为什么你认为你需要覆盖ForeignKey上的to_python
。这与您在链接问题中提到的问题没有任何关系,即在链接之前必须创建对象。最好用表单的干净方法完成,我会在那里添加一个答案。