2013-05-15 12 views
6

sovrascrivo il metodo Save come qui di seguito, e get_thumbnails e risparmia con SORL ..di override metodo di salvataggio - oggetto 'ImageFile' non ha alcun attributo '_committed'

Ma ottengo l'errore '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) 

Qualsiasi idee?

risposta

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

risolto il mio problema ..

+2

salvato o risolto il tuo problema? ;) P.S non chiama il metodo di salvataggio 'super'' due volte. 'super' save ti restituisce un'istanza usa quell'istanza per impostare campi aggiuntivi: ' instance = super (HotelPhotos, self) .save (* args, ** kwargs) ' –

+0

È meglio usare' .name', poiché ' .url' conterrà anche MEDIA_URL, quindi alla fine (se il tuo MEDIA_URL non è vuoto) entrerai in/media/media/cache/... –

0

ho trovato di recente un errore simile, che si è verificato durante l'aggiornamento dei contenuti di un ImageField tramite l'amministratore Django.

Il messaggio di errore era: oggetto 'InMemoryUploadedFile' non ha alcun attributo '_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 

Questo non era che interessano tutti i modelli, ho ristretto fino a questo:

admin.py:

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

La soluzione era quella di modificare il set di query o di amministrazione in questo modo:

admin.py:

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

O semplicemente per sbarazzarsi di esso completamente, dato che non era davvero necessario/pertinente più.