2013-05-15 81 views
6

我重寫保存方法像下面,和get_thumbnails與SORL保存..覆蓋保存方法 - 「鏡像文件」對象有沒有屬性「_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'保存方法兩次。 'super'保存將返回一個實例,使用該實例來設置其他字段: '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') 

或者就是完全擺脫它,因爲它是不真的需要/相關了。

相關問題