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)