Ticket #7614: second_patch.diff
File second_patch.diff, 6.8 KB (added by , 16 years ago) |
---|
-
django/db/models/fields/__init__.py
766 766 def get_db_prep_save(self, value): 767 767 "Returns field's value prepared for saving into a database." 768 768 # Need to convert UploadedFile objects provided via a form to unicode for database insertion 769 if value is None: 769 if hasattr(value, 'file_name'): 770 return value.file_name 771 elif value is None: 770 772 return None 771 return unicode(value) 773 else: 774 return unicode(value) 772 775 773 776 def get_manipulator_fields(self, opts, manipulator, change, name_prefix='', rel=False, follow=True): 774 777 field_list = Field.get_manipulator_fields(self, opts, manipulator, change, name_prefix, rel, follow) … … 857 860 return os.path.normpath(f) 858 861 859 862 def save_form_data(self, instance, data): 860 from django. newforms.fieldsimport UploadedFile863 from django.core.files.uploadedfile import UploadedFile 861 864 if data and isinstance(data, UploadedFile): 862 getattr(instance, "save_%s_file" % self.name)(data.file name, data.data, save=False)865 getattr(instance, "save_%s_file" % self.name)(data.file_name, data, save=False) 863 866 864 867 def formfield(self, **kwargs): 865 868 defaults = {'form_class': forms.FileField} -
django/newforms/fields.py
27 27 28 28 from util import ErrorList, ValidationError 29 29 from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple, DateTimeInput 30 from django.core.files.uploadedfile import SimpleUploadedFile as UploadedFile 30 31 31 32 32 __all__ = ( 33 33 'Field', 'CharField', 'IntegerField', 34 34 'DEFAULT_DATE_INPUT_FORMATS', 'DateField', … … 419 419 # It's OK if Django settings aren't configured. 420 420 URL_VALIDATOR_USER_AGENT = 'Django (http://www.djangoproject.com/)' 421 421 422 class UploadedFile(StrAndUnicode):423 "A wrapper for files uploaded in a FileField"424 def __init__(self, filename, data):425 self.filename = filename426 self.data = data427 422 428 def __unicode__(self):429 """430 The unicode representation is the filename, so that the pre-database-insertion431 logic can use UploadedFile objects432 """433 return self.filename434 435 423 class FileField(Field): 436 424 widget = FileInput 437 425 default_error_messages = { … … 460 448 category = DeprecationWarning, 461 449 stacklevel = 2 462 450 ) 451 data = UploadedFile(data['filename'], data['content']) 463 452 464 453 try: 465 454 file_name = data.file_name 466 455 file_size = data.file_size 467 456 except AttributeError: 468 try: 469 file_name = data.get('filename') 470 file_size = bool(data['content']) 471 except (AttributeError, KeyError): 472 raise ValidationError(self.error_messages['invalid']) 457 raise ValidationError(self.error_messages['invalid']) 473 458 474 459 if not file_name: 475 460 raise ValidationError(self.error_messages['invalid']) 476 461 if not file_size: 477 462 raise ValidationError(self.error_messages['empty']) 478 463 479 return UploadedFile(file_name, data)464 return data 480 465 481 466 class ImageField(FileField): 482 467 default_error_messages = { -
tests/modeltests/model_forms/models.py
803 803 >>> f.is_valid() 804 804 True 805 805 >>> type(f.cleaned_data['file']) 806 <class 'django. newforms.fields.UploadedFile'>806 <class 'django.core.files.uploadedfile.SimpleUploadedFile'> 807 807 >>> instance = f.save() 808 808 >>> instance.file 809 809 u'...test1.txt' … … 814 814 >>> f.is_valid() 815 815 True 816 816 >>> type(f.cleaned_data['file']) 817 <class 'django. newforms.fields.UploadedFile'>817 <class 'django.core.files.uploadedfile.SimpleUploadedFile'> 818 818 >>> instance = f.save() 819 819 >>> instance.file 820 820 u'...test1.txt' … … 906 906 >>> f.is_valid() 907 907 True 908 908 >>> type(f.cleaned_data['image']) 909 <class 'django. newforms.fields.UploadedFile'>909 <class 'django.core.files.uploadedfile.SimpleUploadedFile'> 910 910 >>> instance = f.save() 911 911 >>> instance.image 912 912 u'...test.png' … … 918 918 >>> f.is_valid() 919 919 True 920 920 >>> type(f.cleaned_data['image']) 921 <class 'django. newforms.fields.UploadedFile'>921 <class 'django.core.files.uploadedfile.SimpleUploadedFile'> 922 922 >>> instance = f.save() 923 923 >>> instance.image 924 924 u'...test.png' -
tests/regressiontests/forms/fields.py
800 800 ValidationError: [u'The submitted file is empty.'] 801 801 802 802 >>> type(f.clean(SimpleUploadedFile('name', 'Some File Content'))) 803 <class 'django. newforms.fields.UploadedFile'>803 <class 'django.core.files.uploadedfile.SimpleUploadedFile'> 804 804 805 805 >>> type(f.clean(SimpleUploadedFile('name', 'Some File Content'), 'files/test4.pdf')) 806 <class 'django. newforms.fields.UploadedFile'>806 <class 'django.core.files.uploadedfile.SimpleUploadedFile'> 807 807 808 808 # URLField ################################################################## 809 809 -
docs/newforms.txt
1331 1331 * Validates that non-empty file data has been bound to the form. 1332 1332 * Error message keys: ``required``, ``invalid``, ``missing``, ``empty`` 1333 1333 1334 An ``UploadedFile`` object has two attributes: 1334 To learn more about the ``UploadedFile`` object, see the `file uploads documentation`_. 1335 1335 1336 ====================== ====================================================1337 Attribute Description1338 ====================== ====================================================1339 ``filename`` The name of the file, provided by the uploading1340 client.1341 1342 ``content`` The array of bytes comprising the file content.1343 ====================== ====================================================1344 1345 The string representation of an ``UploadedFile`` is the same as the filename1346 attribute.1347 1348 1336 When you use a ``FileField`` on a form, you must also remember to 1349 1337 `bind the file data to the form`_. 1350 1338 1339 .. _file uploads documentation: ../upload_handling/ 1351 1340 .. _`bind the file data to the form`: `Binding uploaded files to a form`_ 1352 1341 1353 1342 ``FilePathField``