2011-12-19 77 views
1

如何以最小的痛苦將自定義屬性或方法添加到ImageFieldFile對象?覆蓋django中的FieldFile對象

比如我有這樣的模式:

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。我改變了一些對象名稱,使問題變得抽象並且不會讓你感到困惑

回答

0

在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) 

編輯:

如果你想計算字段/方法,並不需要額外的數據庫信息,只要繼承models.ImageField:

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

    def my_method(self): 
     print self.my_class_attr