Django FileField выбрасывает ошибку атрибута при хранении ContentFile
Я создаю экземпляр ContentFile из переданной ему строки и пытаюсь сохранить его в модели следующим образом:
def generate_file_path(instance, filename):
path = f"{instance.name}/{instance.field}_{filename}"
return path
class SampleModel(models.Model):
name = CharField(max_length=50)
field = CharField(max_length=100)
upload = models.FileField(
_("Skan"),
storage=settings.FILE_STORAGE,
upload_to=generate_file_path
)
file = ContentFile('sample content', name='file.txt')
instance = SampleModel(upload=file, name='name', field='field_info')
instance.save()
Но при сохранении он бросает
AttributeError: 'str' object has no attribute 'generate_filename'
что странно, потому что FileField должно обрабатывать экземпляр ContentFile. Что я делаю не так?
Похоже, что в ContentFile
отсутствует атрибут generate_filename
, который ожидает функция upload_to
, определенная в SewageCompanyConsts
...
Вы можете явно присвоить filename
экземпляру ContentFile
, прежде чем присвоить его FileField
:
class SampleModel(models.Model):
upload = models.FileField(
_("Skan"),
storage=settings.FILE_STORAGE,
upload_to=SewageCompanyConsts.generate_file_path
)
file = ContentFile('sample content')
file.name = 'file.txt'
instance = SampleModel(upload=file)
instance.save()