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()
Вернуться на верх