django add_to_class () заставляет наследование моделей / MRO работать неправильно - PullRequest
4 голосов
/ 09 октября 2011

У меня проблема с наследованием в моих моделях при добавлении полей через 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'

Любая подсказка?

1 Ответ

4 голосов
/ 10 октября 2011

Ваша модель add_to_class не добавляет поле в качестве атрибута.он просто вызывает contribute_to_class на вашем поле: django/db/models/base.py#L218

contribute_to_class вашего поля тоже не делает этого.Он просто добавляет поле к элементу _meta модели: django/db/models/fields/__init__.py#L234

...