Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

[1.5.x] Fixed #19525 -- Reverted dcd4383 and 05d333b.

Refs #9893, #18515.

Thanks Russell for the report.

Backport of db278c3 from master.
  • Loading branch information...
commit 3cb87ec605fb9e7785aa0580bd8220797b622e0c 1 parent fbc06ee
@aaugustin aaugustin authored
View
24 django/db/models/fields/files.py
@@ -3,7 +3,6 @@
from django import forms
from django.db.models.fields import Field
-from django.core.exceptions import ValidationError
from django.core.files.base import File
from django.core.files.storage import default_storage
from django.core.files.images import ImageFile
@@ -207,10 +206,6 @@ def __set__(self, instance, value):
class FileField(Field):
- default_error_messages = {
- 'max_length': _('Filename is %(extra)d characters too long.')
- }
-
# The class to wrap instance attributes in. Accessing the file object off
# the instance will always return an instance of attr_class.
attr_class = FieldFile
@@ -233,25 +228,6 @@ def __init__(self, verbose_name=None, name=None, upload_to='', storage=None, **k
kwargs['max_length'] = kwargs.get('max_length', 100)
super(FileField, self).__init__(verbose_name, name, **kwargs)
- def validate(self, value, model_instance):
- """
- Validates that the generated file name still fits within max_length.
- """
- # The generated file name stored in the database is generally longer
- # than the uploaded file name. Using the length of generated name in
- # the error message would be confusing. However, in the common case
- # (ie. upload_to='path/to/upload/dir'), the length of the generated
- # name equals the length of the uploaded name plus a constant. Thus
- # we can tell the user how much shorter the name should be (roughly).
- if value and value._committed:
- filename = value.name
- else:
- filename = self.generate_filename(model_instance, value.name)
- length = len(filename)
- if self.max_length and length > self.max_length:
- error_values = {'extra': length - self.max_length}
- raise ValidationError(self.error_messages['max_length'] % error_values)
-
def get_internal_type(self):
return "FileField"
View
2  tests/modeltests/files/models.py
@@ -26,5 +26,5 @@ def random_upload_to(self, filename):
normal = models.FileField(storage=temp_storage, upload_to='tests')
custom = models.FileField(storage=temp_storage, upload_to=custom_upload_to)
- random = models.FileField(storage=temp_storage, upload_to=random_upload_to, max_length=16)
+ random = models.FileField(storage=temp_storage, upload_to=random_upload_to)
default = models.FileField(storage=temp_storage, upload_to='tests', default='tests/default.txt')
View
19 tests/modeltests/files/tests.py
@@ -5,7 +5,6 @@
import tempfile
from django.core.cache import cache
-from django.core.exceptions import ValidationError
from django.core.files import File
from django.core.files.base import ContentFile
from django.core.files.uploadedfile import SimpleUploadedFile
@@ -103,24 +102,6 @@ def test_files(self):
obj4.random.save("random_file", ContentFile("random content"))
self.assertTrue(obj4.random.name.endswith("/random_file"))
- def test_max_length(self):
- """
- Test that FileField validates the length of the generated file name
- that will be stored in the database. Regression for #9893.
- """
- # upload_to = 'unused', so file names are saved as '456/xxxxx'.
- # max_length = 16, so names longer than 12 characters are rejected.
- s1 = Storage(random=SimpleUploadedFile(12 * 'x', b"content"))
- s1.full_clean()
- with self.assertRaises(ValidationError):
- Storage(random=SimpleUploadedFile(13 * 'x', b"content")).full_clean()
-
- # Ticket #18515: validation for an already saved file should not check
- # against a regenerated file name (and potentially raise a ValidationError
- # if max_length is exceeded
- s1.save()
- s1.full_clean()
-
class FileTests(unittest.TestCase):
def test_context_manager(self):
Please sign in to comment.
Something went wrong with that request. Please try again.