2011-12-19 9 views
1

ImageFieldFileオブジェクトにカスタムのプロパティまたはメソッドを最小限の苦痛で追加するには?私はそれが私のカスタムオブジェクトを返し、計算方法、などがありますので、何とかImageFieldFileオブジェクトを上書きしたいdjangoのFieldFileオブジェクトをオーバーライド

class Custom(object): 

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

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

とクラス:私はこのモデルを持っている。例えば

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

UPD。いくつかのオブジェクト名を変更し、抽象的な問題を混乱させないようにしました。

答えて

0

Djangoでは、1つのモデルフィールドは常に1つのデータベース列に対応しています。また、クラス 'Image'のオブジェクトは単なる画像である必要があるため、クラス名は常に単数である必要があります。

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

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

EDIT:あなたは、余分なデータベース情報を必要としない計算フィールド/メソッドを使用する場合は

、ちょうどサブクラスmodels.ImageField:私はあなたがより以下のような何かをしたいかもしれないと思う

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

    def my_method(self): 
     print self.my_class_attr 
関連する問題