【问题标题】:django add_to_class() making models inheritance/MRO work wrongdjango add_to_class() 使模型继承/MRO 工作错误
【发布时间】:2011-10-09 13:53:59
【问题描述】:

通过 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'

有什么线索吗?

【问题讨论】:

    标签: django inheritance method-resolution-order


    【解决方案1】:

    您模型的add_to_class 没有将该字段添加为属性。它只是在您的字段上调用contribute_to_classdjango/db/models/base.py#L218

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

    【讨论】:

    • +1 我更新了链接,使它们在固定的时间点直接指向 Github,而不是跟踪最新的代码。链接参考 Django 1.3.1。
    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多