1

使用 django-filebrowser 和FileBrowserField我正在尝试directory根据模型本身中的键分配参数。因此,使用博客示例,如果我为不同的帖子保存照片,照片将位于以博客 ID 命名的目录中。因此,如果MEDIA_ROOT/some/path/to/media/filebrowser_files/希望动态分配directory参数为MEDIA_ROOT+str(model_pk)

在这一点上,我试图做类似以下的事情,但不明白如何获取当前对象的 id。(DoesNotExist 异常,“未提供异常”)我知道尝试使用 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
4

1 回答 1

1

我意识到我没有仔细查看您的代码。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)

只有在将 Page 分配给 PageImage 中的字段后,才可以执行您想要的操作。

于 2011-10-27T04:07:29.277 回答