2013-05-15 7 views
6

私は以下のような方法、およびget_thumbnailsを保存してSORLでセーブを上書き..saveメソッドのオーバーライド - '画像ファイル' オブジェクトが何も属性が '_committedない' い

しかし、エラーに'ImageFile' object has no attribute '_committed'

class HotelPhotos(models.Model): 
    hotel = models.ForeignKey(Hotel, related_name='photos') 
    code = models.CharField(max_length=255) 
    original = models.ImageField(upload_to="media") 
    medium = models.ImageField(upload_to="media", null=True, editable=False) 
    thumbnail = models.ImageField(upload_to="media", null=True, editable=False) 

    def save(self, *args, **kwargs): 

     super(HotelPhotos, self).save(*args, **kwargs) 
     self.medium = get_thumbnail(self.original, 
            '100x100', 
            crop='center', 
            quality=99) 

     self.thumbnail = get_thumbnail(self.original, 
             '50x50', 
             crop='center', 
             quality=99) 

     super(HotelPhotos, self).save(*args, **kwargs) 

どれを取得しますアイデア?

答えて

7
self.thumbnail = get_thumbnail(self.original, 
            '50x50', 
            crop='center', 
            quality=99).url 

は...

+2

あなたの問題を保存または解決しましたか? ;)P.Sは 'super' saveメソッドを2回呼び出さない。 'super' saveはそのインスタンスを使ってインスタンスを返します。 ' instance = super(HotelPhotos、self).save(* args、** kwargs) ' –

+0

' .name'は ' .url'にもMEDIA_URLが含まれているので、最後に(MEDIA_URLが空でない場合)/ media/media/cache /に入ります。 –

0

を私の問題を解決し、私は、Djangoの管理者を経由してのImageFieldの内容を更新する際に発生した、最近同様のエラーを発見しました。

エラーメッセージがあった。'InMemoryUploadedFile' オブジェクトが '_committed' は属性を持っていない

models.py:、私は狭めこれは、すべてのモデルに影響を与えていなかった

class MyObject(models.Model): 
    name = models.CharField(max_length=80, unique=True, db_index=True) 
    slug = models.SlugField(max_length=80, unique=True, blank=False) 
    some_image = ImageField(upload_to='uploads/some/') 
    # ... deleted for brevity 

それ以下:

admin.py:

class MyObjectAdmin(admin.ModelAdmin): 
    # ... 
    def queryset(self, request): 
     return super(ShipAdmin, self).queryset(request).only('name', 'slug') 

ソリューションはそうのような管理者のクエリセットを変更するのいずれかであった:

admin.py:

class MyObjectAdmin(admin.ModelAdmin): 
    # ... 
    def queryset(self, request): 
     return super(MyObjectAdmin, self).queryset(request).only('name', 'slug', 'some_image') 

それとも、それはなかったためだけでは、完全にそれを取り除くために本当に必要/関連しています。

関連する問題