通过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)
图片应该继承这两者,但它只获取方法,而不是字段:
>>> 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'
有任何线索吗?
答案 0 :(得分:4)
您的模型add_to_class
不会将该字段添加为属性。它只是在您的字段上调用contribute_to_class
:
django/db/models/base.py#L218
您的字段contribute_to_class
也没有这样做。它只是将字段添加到模型的_meta
成员:django/db/models/fields/__init__.py#L234