Django - иметь несколько MEDIA_ROOT и MEDIA_URL

Я настроил оба каталога MEDIA_ROOT и MEDIA_URL и все работает отлично. Мои файлы MEDIA хранятся в каталоге с именем /media/, теперь я хочу сохранить вновь загруженные файлы в новый каталог (например, /media2/), не нарушая предыдущие файлы.

Например, у меня была такая модель книги:

class Book(models.Model):
    # name
    # author
    cover = models.ImageField()

Теперь представьте, что у меня есть 500 объектов модели Book, и каждая обложка имеет путь и url, как это:

url: http://example.com/media/books/thumb.jpg

путь: /home/myproj/media/books/thumb.jpg

Теперь я хочу хранить обложки для моих вновь созданных книг в другом каталоге, например :

url: http://example.com/media2/books/thumb.jpg

путь: /home/myproj/media2/books/thumb.jpg

не нарушая предыдущих 500 книг!

Как я могу этого добиться?! (Django 3.1.2)

важно загрузить все файлы в один каталог. Отсюда можно определить атрибут upload_to для файлов: "Этот атрибут обеспечивает способ задания директории загрузки и имени файла и может быть задан двумя способами. В обоих случаях значение передается в метод Storage.save()."

Вот пара примеров из Django docs:

class MyModel(models.Model):
  # file will be uploaded to MEDIA_ROOT/uploads
  upload = models.FileField(upload_to='uploads/')
  # or...
  # file will be saved to MEDIA_ROOT/uploads/2015/01/30
  upload = models.FileField(upload_to='uploads/%Y/%m/%d/')

Или создайте функцию для передачи в модель:

def user_directory_path(instance, filename):
    # file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
    return 'user_{0}/{1}'.format(instance.user.id, filename)

class MyModel(models.Model):
    upload = models.FileField(upload_to=user_directory_path)
Вернуться на верх