我正在尝试实现一个自定义Django模型字段(受此博客文章启发),尽管我的代码运行良好,但以下代码行吸引了我:
value = instance.__dict__[self.field_name]
在我看来,这只是一个丑陋的电话方式getattr()
。因此,我将此行更改为以下内容:
value = getattr(instance, self.field_name)
我希望代码可以运行相同的代码。事实并非如此,因为现在我遇到了无限递归错误:
RuntimeError at /admin/testapp/testmodel/
maximum recursion depth exceeded
为什么在使用时会得到无限递归getattr()
,而在使用时却没有__dict__[]
?
--
编辑:这是链接的博客文章中的示例模型定义:
from django.db import models
class Bookmark(models.Model):
url = models.URLField()
getattr尝试以任何可能的方式获取属性。这包括呼叫__get__
。如果在getattr调用的函数中使用getattr(具有相同的参数),则将以无限循环结束。直接访问可__dict__
避免此“问题”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句