Django filebrowser, специфичный для модели параметр каталога для FileBrowserField - PullRequest
1 голос
/ 27 октября 2011

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

. В этот момент я попытался сделать что-то похожее на следующее, но не понимаю, какполучить идентификатор текущего объекта.(Делает исключение NotNotExist с «Не предоставлено исключение»). Я знаю, что ошибка существует при попытке использовать 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 Ответ

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

Я понимаю, что не посмотрел ближе на твой код.self.page не будет работать, потому что вы инициализируете экземпляр Model, а 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.

...