Переопределение объекта FieldFile в Django - PullRequest
1 голос
/ 19 декабря 2011

Как добавить пользовательское свойство или метод к объекту ImageFieldFile с минимальной болью?

Например, у меня есть эта модель:

class SomeModelWithImage(models.Model):
    image = models.ImageField()

и класс:

class Custom(object):

    def __repr__(self):
        return "<Custom object>"    

Я хочу как-то переопределить объект ImageFieldFile, чтобы у него был рассчитанный метод, который возвращает мой пользовательский объект, например:

>> from models import SomeModelWithImage
>> i = SomeModelWithImage.objects.all()[0]
>> i.image
   <ImageFieldFile: /path/to/file>
>> i.image.custom_text
   <Custom object>

UPD. Я изменил некоторые имена объектов, чтобы создать проблемуабстрагироваться и не смущать вас

1 Ответ

0 голосов
/ 19 декабря 2011

В Django одно поле модели всегда соответствует одному столбцу базы данных, поэтому то, что вы хотите, невозможно.Кроме того, имена ваших классов всегда должны быть единичными, потому что объект класса 'Image' должен быть просто одним изображением.Я думаю, что вам может понадобиться что-то вроде следующего:

class ImageSet(models.Model):
    images = models.ManyToManyField('Image')

class Image(models.Model):
    image_file = models.ImageField()
    custom_text = models.CharField(max_length=255)

РЕДАКТИРОВАТЬ:

Если вы хотите вычисляемое поле / метод, который не требует дополнительной информации базы данных, просто подкласс моделей. ImageField:

class MyImageField(models.ImageField):
    my_class_attr = "BLARG"

    def my_method(self):
        print self.my_class_attr
...