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.