Загрузка файла после сохранения модели в админке Django - PullRequest
2 голосов
/ 02 октября 2011

Я использую загрузку файлов в моей модели Django следующим образом:

 def upload_path(self, filename):
    return 'upload/actualities/%s/%s' % (self.id, filename)

photo = models.ImageField(upload_to=upload_path)

и мой adminModel:

from actualities.models import *
from django.contrib import admin  

class ActualityAdmin(admin.ModelAdmin):
     class Media:
         js = ('/static/js/tiny_mce/tiny_mce.js', '/static/js/textareas.js')

 admin.site.register(Actuality, ActualityAdmin)

Все работает нормально, кроме случаев, когда я редактирую модель mu, потому чтоимеет идентификаторНо когда я его создаю, загрузка файла происходит до сохранения модели ... Поэтому я помещаю свой файл в /media/actualities/None/filename.jpg, и я хочу /media/2/filename.jpg

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

Спасибо !!!

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Возможно, вы захотите переопределить метод save () модели, и, возможно, придумаете пользовательский UploadHandler «ничего не делать», затем переключитесь обратно на исходный и снова вызовите save.

https://docs.djangoproject.com/en/dev/topics/http/file-uploads/

https://docs.djangoproject.com/en/dev/topics/db/models/

Однако в этой ситуации я бы сделал специальный обработчик загрузки, который сохраняет файл в некотором временном пространстве. Затем я переопределил бы метод сохранения (в миксе или что-то в этом роде), который перемещает файл из temp в нужное место.

@ Ответ Томека тоже другой. Если ваша модель генерирует собственный идентификатор, вы можете использовать его.

Второе предпоследнее предложение, которое я делаю с моим фотоблогом, - вместо сохранения всех изображений в каталоге, например media / 2 / filename.jpg, я сохраняю изображение по дате загрузки. 2011/10/2 / image.jpg Этот вид помогает любому каталогу стать слишком громоздким.

Наконец, вы могли бы хэшировать имена файлов и сохранять их в каталогах с хэш-именами, чтобы равномерно распределить изображения в каталоге.

Я выбрал стиль даты, потому что это важно для меня с этим проектом. Возможно, есть другой способ присвоения имени изображению для сохранения, которое будет означать нечто большее, чем «модель с изображениями с идентификатором 2», которую вы могли бы использовать для этой проблемы.

Удачи!

1 голос
/ 02 октября 2011

В качестве обходного пути попробуйте сгенерировать UUID для имени файла (вместо использования self.id).

...