2013-05-15 14 views
6

ich die Methode, wie unten speichern außer Kraft setzen, und get_thumbnails und sparen mit SORL ..Überschreibung speichern Methode - ‚Imagefile‘ Objekt hat kein Attribut ‚_committed‘

Aber bekommen den Fehler '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) 

Beliebig Ideen?

Antwort

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

mein Problem gelöst ..

+2

gespeichert oder gelöst Ihr Problem? ;) P.S nicht 'Super' Save-Methode zweimal aufrufen. 'super' save wird Ihnen eine Instanz zurückgeben Verwenden Sie diese Instanz, um zusätzliche Felder zu setzen: ' instance = super (HotelPhotos, self) .save (* args, ** kwargs) ' –

+0

Es ist besser,' .name' zu ​​verwenden, da ' .url' enthält auch MEDIA_URL, so dass Sie am Ende (wenn Ihre MEDIA_URL nicht leer ist) in/media/media/cache/... –

0

Ich habe vor kurzem einen ähnlichen Fehler gefunden, der auftrat, wenn die Inhalte eines Imagefield über die django Admin zu aktualisieren.

Die Fehlermeldung lautet: 'InMemoryUploadedFile' Objekt kein Attribut '_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 

Dies wurde nicht jedes Modell zu beeinflussen, ich verengte es bis zu diesem:

admin.py:

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

Die Lösung bestand darin, entweder das Admin queryset zu ändern wie folgt:

admin.py:

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

Oder nur ganz davon zu befreien, da es nicht war wirklich benötigt/relevant mehr.