2013-05-15 27 views
6

tôi ghi đè lên các phương pháp tiết kiệm như dưới đây, và get_thumbnails và tiết kiệm với sorl ..override tiết kiệm phương pháp - đối tượng 'ImageFile' không có thuộc tính '_committed'

Nhưng nhận được lỗi '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) 

Bất kỳ ý tưởng?

Trả lời

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

giải quyết vấn đề của tôi ..

+2

đã lưu hoặc giải quyết được sự cố của bạn? ;) P.S không gọi phương thức 'super' save hai lần. 'super' save sẽ trả về cho bạn một cá thể sử dụng cá thể đó để thiết lập các trường bổ sung: ' instance = super (HotelPhotos, self) .save (* args, ** kwargs) ' –

+0

Tốt hơn nên sử dụng' .name', vì ' .url' cũng sẽ chứa MEDIA_URL, vì vậy cuối cùng (nếu MEDIA_URL của bạn không trống), bạn sẽ nhận được vào/media/media/cache/... –

0

Tôi tìm thấy một lỗi tương tự gần đây, xảy ra khi cập nhật các nội dung của một ImageField thông qua quản trị django.

Thông báo lỗi là: đối tượng 'InMemoryUploadedFile' không có thuộc tính '_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 

này đã không ảnh hưởng đến tất cả các mô hình, tôi thu hẹp nó xuống đến điều này:

admin.py:

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

Giải pháp là một trong hai thay đổi queryset quản trị như sau:

admin.py:

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

Hoặc chỉ cần để thoát khỏi nó hoàn toàn, vì nó không phải là thực sự cần thiết/có liên quan nữa.

Các vấn đề liên quan