2013-05-15 6 views
6

मैं और नीचे की तरह विधि बचाने ओवरराइड, get_thumbnails और sorl साथ बचाने ..ओवरराइड विधि बचाने - 'imagefile' ऑब्जेक्ट कोई विशेषता '_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

आपकी समस्या को बचाया या हल किया? ;) पी। दो बार 'सुपर' सेव विधि को कॉल न करें। 'सुपर' सेव आपको अतिरिक्त उदाहरण सेट करने के लिए उस उदाहरण का उदाहरण देगा: 'instance = super (HotelPhotos, self)। सेव (* args, ** kwargs)' –

+0

'.name' का उपयोग करना बेहतर है, .url' में MEDIA_URL भी शामिल होगा, इसलिए अंत में (यदि आपका MEDIA_URL खाली नहीं है) तो आप/मीडिया/मीडिया/कैश/... में प्रवेश करेंगे –

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') 

या बस, पूरी तरह से यह से छुटकारा पाने के बाद से यह नहीं था वास्तव में अब आवश्यक/प्रासंगिक है।

संबंधित मुद्दे