#python #django
#python #django
Вопрос:
Например, я должен использовать приложения django
- project
-- photo
-- attachments
И я создаю модель, в которой я храню свои tmp-файлы
# python 3.4
class UploadedFiles(models.Model):
file = models.FileField(upload_to='photo/%Y/%m/%d')
Но я хочу использовать эту таблицу для всех загружаемых файлов и динамически изменять upload_to
.
Я подумал об этом и написал это
# python 3.4
def get_path(instance, filename):
filename, file_ext = os.path.splitext(filename)
return instance.path.format(filename, file_ext)
class UploadedFiles(models.Model):
path = models.CharField(max_length=100)
file = models.FileField(upload_to=get_path, blank=True)
Итак, сначала я создаю новую запись
# python 3.4
uf = UploadedFiles.path = 'attachments/%Y/%m/%d/{0}.blabla.{1}'
uf.save()
При следующем сохранении файла
uf.file = file
uf.save()
ОК. Это работает, но выглядит очень плохо. Как я могу сделать это нормально?
Спасибо!
Ответ №1:
Вы имеете в виду это?
from django.core.files import File, ContentFile
uf = UploadedFiles(path='...', file=File(fp))
# Or
uf = UploadedFiles(path='...', file=ContentFile(file_content))
uf.save()
Кроме того, '%Y'
не работает, если вы укажете upload_to
как функцию, если я правильно помню.
Комментарии:
1. Я хочу загрузить файл с моим,
upload_to
не создаваяpath
.2. @AlexanderKiselev Ты имеешь в виду присвоение path значения по умолчанию:
path = models.CharField(max_length=100, default='attachments/...')
?3. Нет… Например, у меня есть таблица, в которой я храню все свои файлы. Я хочу хранить файлы в разных папках, я хочу задать
upload_to
параметр динамически, как в примере, но безpath
метода в моей модели.4. @AlexKiselev Извините, я не понимаю. Но вы должны реализовать
upload_to
для динамической генерации путей.