django add_to_class() 使模型继承/MRO 工作出错

标签 django inheritance method-resolution-order

通过 add_to_class() 添加字段时,我的模型继承存在问题。
我有一个模型 File(models.Model)Image(File) - 这些来自 django-filer。

在我的应用程序中,我正在导入它们并添加字段和方法:

def method_x(self):
    print "x"

File.add_to_class("expiration_date", models.DateField(null=True, blank=True))
File.add_to_class("method_x", method_x)

Image 应该继承这两个,但它只获取方法,而不是字段:
>>> some_file = File.objects.get(id=8)
>>> some_image = Image.objects.get(id=8)
>>>
>>> print some_file.expiration_date # this works
... None
>>>
>>> some_image.metgod_x() # this works
>>> x
>>>
>>> print some_image.expiration_date # and this not
Traceback (most recent call last):
    File "<console>", line 1, in <module>
AttributeError: 'Image' object has no attribute 'expiration_date'

有什么线索吗?

最佳答案

您的型号 add_to_class不会将该字段添加为属性。它只是调用 contribute_to_class在你的领域:
django/db/models/base.py#L218

您所在领域的contribute_to_class也不这样做。它只是将字段添加到模型的 _meta成员(member): django/db/models/fields/__init__.py#L234

关于django add_to_class() 使模型继承/MRO 工作出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7703989/

相关文章:

c# - 为什么使用泛型的 "Equals"方法解析与显式调用不同

html - 用于替换 div 内容的 jQuery html() 仅适用于第一次

c++ - 多重继承中的类型偏移

python - 为什么连续调用 RequestContext.__init__ 中的空字典来更新?

java - 带有继承的 JPA 映射树结构

c++ - Pimpl习惯用语结合了多个虚拟继承

python-3.x - 此 Python 代码中多重继承的最佳实践

python - 为什么元类上的 .mro() 具有不同的签名? `descriptor ' 对象的 'type' mro' 需要一个参数`

python - 为什么某些情况下Python需要手动设置LC_CTYPE

python - django unicode 到字符串