@NogerbekNurzhan

Как правильно в Django сохранить файл в определенное место?

Здравствуйте! Помогите пожалуйста разобраться.

Есть модель данных Product. У каждого продукта есть категория. Также есть форма для создания новой записи, где пользователь указывает категорию и загружает файл.

Вопрос следующий: как в зависимости от выбранной категории (предположим есть всего две категории) указывать отпределенное место загрузки файлов за пределами MEDIA_ROOT указанного в настройках?

Структура:
my_site  <- основная директория, где хранится сам проект
my_site_files  < - Файлы нужно хранить за пределами проекта
      |____ category_1   <- файлы продукции с категорией 1 хранятся здесь
      |____ category_2   <- файлы продукции с категорией 2 хранятся здесь


models.py:
class Product(models.Model):
    file = models.FileField(
        max_length=255,
        blank=True,
        null=True,
        validators=[validate_file_extension]
    )


Что я сделал:
Cоздал для начало переменную окружения (PRODUCT_FILE_PATH) с абсолютным адресом до папки my_site_files. Подумал, что буду использовать эту переменную. Далее насколько я понял нужно использовать сигналы. Начал так, но если честно запутался:

@receiver(post_save, sender=Document)
def update_file_path(sender, instance, created, *args, **kwargs):
	if created:
		product_file=instance.file
		old_name=product_file.name
		if not old_name:
			return
		if instance.category==1:
			# Здесь сохранить путь для первой категории
		elif instance.category==2:
			# Здесь сохранить путь для первой категории
		instance.save()
  • Вопрос задан
  • 181 просмотр
Решения вопроса 1
rSedoy
@rSedoy
Python/Django
FileField делает сохранения относительно MEDIA_ROOT, есть еще https://docs.djangoproject.com/en/2.0/ref/models/f... но там просто путь, а сохранение файлов надо самому к этому прикручивать, насколько это можно использовать - не знаю, но то что можно поиметь большие проблемы с безопасностью - факт. А в чем проблема хранения в MEDIA_ROOT (его так же можно указать за пределами проекта или сделать в него симлинки из других мест)?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
20 авг. 2018, в 21:21
30000 руб./за проект
20 авг. 2018, в 20:46
5000 руб./за проект
20 авг. 2018, в 20:38
700 руб./в час