2011-10-27 1 views
1

Использование django-filebrowser и FileBrowserField Я пытаюсь назначить параметр directory на основе ключа в самой модели. Поэтому, используя пример блога, если бы я сохранял фотографии для разных сообщений, фотографии были бы в каталогах, названных в честь идентификатора блога. Так что, если MEDIA_ROOT был /some/path/to/media/filebrowser_files/ Я хочу, чтобы динамически назначить directory параметра Я быть MEDIA_ROOT+str(model_pk)Django filebrowser, специфичный для модели параметр каталога для FileBrowserField

На данный момент я пытался сделать что-то похожее на следующее, но не понимаю, как получить идентификатор текущего объекта. (Исключение NoNotExist с «Без исключения») Я знаю, что ошибка существует в попытке использовать self.page, но я не знаю, как это сделать правильно. Может ли кто-нибудь дать представление о том, где моя логика ошибочна, и что я могу сделать, чтобы исправить это? Большое спасибо.

class PageImage(models.Model): 
    page = models.ForeignKey(Page) 
    page_photo = FileBrowseField("Image", max_length=200, blank=True, null=True) 
    def __init__(self, *args, **kwargs): 
     super(PageImage, self).__init__(*args, **kwargs) 
     path = settings.MEDIA_ROOT+'pages/unfiled/' 
     if self.page: 
      path = settings.MEDIA_ROOT+'pages/'+str(self.page)+'/' 
     if not os.path.exists(path): 
      os.makedirs(path) 
     self._meta.get_field_by_name("page_photo")[0].directory = path 

ответ

1

Я понимаю, что я не смотрел ближе к вашему коду. self.page не будет работать, потому что вы инициализируете экземпляр модели, а self.page не была установлена ​​на страницу в базе данных. Вместо этого вы должны:

class PageImage(models.Model): 
    page = models.ForeignKey(Page) 
    page_photo = FileBrowseField("Image", max_length=200, blank=True, null=True) 

    def save(self, *args, **kwargs): 

     path = settings.MEDIA_ROOT+'pages/unfiled/' 
     if self.page: 
      path = settings.MEDIA_ROOT+'pages/'+str(self.page)+'/' 
     if not os.path.exists(path): 
      os.makedirs(path) 
     self._meta.get_field_by_name("page_photo")[0].directory = path 
     super(PageImage, self).save(*args, **kwargs) 

Выполнение того, что вы хотите, только после того, как вы присвоили страницу в поле в PageImage.

+0

Спасибо за ответ. Модель страницы не имеет ничего необычного. Проблема заключается в том, что я использую self, поскольку я могу удалить все, кроме вызова супер-init и печати (str (self.page)). Вот где я получаю исключение из DoNotExist, указав, что исключение не предоставлено. Никакого переопределения pk мною. – wilbbe01

+0

Спасибо за обновленный ответ. Это, по крайней мере, заставляет меня делать то, что я пытаюсь, но я думаю, мне нужно переосмыслить, как я это делаю. Установка 'directory' не сильно влияет на сохранение, так как изображение уже загружено ... поэтому мне нужно будет перемещать изображения из того места, где они были загружены при сохранении. Управление файлами ... весело. Еще раз спасибо. – wilbbe01