Django

Code

Show
Ignore:
Timestamp:
07/01/08 10:10:51 (3 months ago)
Author:
jacob
Message:

Fixed #2070: refactored Django's file upload capabilities.

A description of the new features can be found in the new upload handling documentation; the executive summary is that Django will now happily handle uploads of large files without issues.

This changes the representation of uploaded files from dictionaries to bona fide objects; see BackwardsIncompatibleChanges for details.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/db/models/fields/__init__.py

    r7797 r7814  
    812812        setattr(cls, 'get_%s_url' % self.name, curry(cls._get_FIELD_url, field=self)) 
    813813        setattr(cls, 'get_%s_size' % self.name, curry(cls._get_FIELD_size, field=self)) 
    814         setattr(cls, 'save_%s_file' % self.name, lambda instance, filename, raw_contents, save=True: instance._save_FIELD_file(self, filename, raw_contents, save)) 
     814        setattr(cls, 'save_%s_file' % self.name, lambda instance, filename, raw_field, save=True: instance._save_FIELD_file(self, filename, raw_field, save)) 
    815815        dispatcher.connect(self.delete_file, signal=signals.post_delete, sender=cls) 
    816816 
     
    835835            func = getattr(new_object, 'save_%s_file' % self.name) 
    836836            if rel: 
    837                 func(new_data[upload_field_name][0]["filename"], new_data[upload_field_name][0]["content"], save) 
     837                file = new_data[upload_field_name][0] 
    838838            else: 
    839                 func(new_data[upload_field_name]["filename"], new_data[upload_field_name]["content"], save) 
     839                file = new_data[upload_field_name] 
     840 
     841            # Backwards-compatible support for files-as-dictionaries. 
     842            # We don't need to raise a warning because Model._save_FIELD_file will 
     843            # do so for us. 
     844            try: 
     845                file_name = file.file_name 
     846            except AttributeError: 
     847                file_name = file['filename'] 
     848 
     849            func(file_name, file, save) 
    840850 
    841851    def get_directory_name(self): 
     
    850860        from django.newforms.fields import UploadedFile 
    851861        if data and isinstance(data, UploadedFile): 
    852             getattr(instance, "save_%s_file" % self.name)(data.filename, data.content, save=False) 
     862            getattr(instance, "save_%s_file" % self.name)(data.filename, data.data, save=False) 
    853863 
    854864    def formfield(self, **kwargs):