Django filebrowser, специфичный для модели параметр каталога для FileBrowserField

Используя 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 ответ

Решение

Я понимаю, что не посмотрел ближе на твой код. 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.

Другие вопросы по тегам