覆盖保存方法 - “镜像文件”对象有没有属性“_committed”

问题描述:

我重写保存方法像下面,和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) 

任何想法?

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/... –

我最近发现一个类似的错误,通过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') 

或者就是完全摆脱它,因为它是不真的需要/相关了。