mirror of https://github.com/django/django.git
Fixed #31812 -- Fixed FileField.model for fields defined in abstract models.
Regression in a93425a37f
.
This commit is contained in:
parent
41065cfed5
commit
c1f8d87bb0
|
@ -299,6 +299,10 @@ class FileField(Field):
|
||||||
file.save(file.name, file.file, save=False)
|
file.save(file.name, file.file, save=False)
|
||||||
return file
|
return file
|
||||||
|
|
||||||
|
def contribute_to_class(self, cls, name, **kwargs):
|
||||||
|
super().contribute_to_class(cls, name, **kwargs)
|
||||||
|
setattr(cls, self.attname, self.descriptor_class(self))
|
||||||
|
|
||||||
def generate_filename(self, instance, filename):
|
def generate_filename(self, instance, filename):
|
||||||
"""
|
"""
|
||||||
Apply (if callable) or prepend (if a string) upload_to to the filename,
|
Apply (if callable) or prepend (if a string) upload_to to the filename,
|
||||||
|
|
|
@ -8,8 +8,9 @@ from pathlib import Path
|
||||||
from django.core.files import File, temp
|
from django.core.files import File, temp
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.core.files.uploadedfile import TemporaryUploadedFile
|
from django.core.files.uploadedfile import TemporaryUploadedFile
|
||||||
from django.db import IntegrityError
|
from django.db import IntegrityError, models
|
||||||
from django.test import TestCase, override_settings
|
from django.test import TestCase, override_settings
|
||||||
|
from django.test.utils import isolate_apps
|
||||||
|
|
||||||
from .models import Document
|
from .models import Document
|
||||||
|
|
||||||
|
@ -147,3 +148,21 @@ class FileFieldTests(TestCase):
|
||||||
self.assertEqual(document.myfile.field, loaded_myfile.field)
|
self.assertEqual(document.myfile.field, loaded_myfile.field)
|
||||||
finally:
|
finally:
|
||||||
document.myfile.delete()
|
document.myfile.delete()
|
||||||
|
|
||||||
|
@isolate_apps('model_fields')
|
||||||
|
def test_abstract_filefield_model(self):
|
||||||
|
"""
|
||||||
|
FileField.model returns the concrete model for fields defined in an
|
||||||
|
abstract model.
|
||||||
|
"""
|
||||||
|
class AbstractMyDocument(models.Model):
|
||||||
|
myfile = models.FileField(upload_to='unused')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
|
||||||
|
class MyDocument(AbstractMyDocument):
|
||||||
|
pass
|
||||||
|
|
||||||
|
document = MyDocument(myfile='test_file.py')
|
||||||
|
self.assertEqual(document.myfile.field.model, MyDocument)
|
||||||
|
|
Loading…
Reference in New Issue