你能为管理员推荐一个好的django文件管理器吗?
我正在寻找一个健壮、稳定的django文件管理器,用于django管理 我的愿望清单:你能为管理员推荐一个好的django文件管理器吗?,django,django-admin,Django,Django Admin,我正在寻找一个健壮、稳定的django文件管理器,用于django管理 我的愿望清单: 允许浏览和选择服务器上的文件(例如图像) 允许上传文件。多个文件上传会很好(例如uploadify) 不要求我在模型定义中使用自定义字段(就像django filebrowser那样)。我想要一些理想情况下可以附加到admin.py中的CharField(或FileField的ImageField)的东西,比如Carl Meyer的 我用过(非笔译版),也看过(但没有用过)。两个都很好。但是django fi
我很乐意修改其中的一个来满足我的需要,但如果我缺少其他的选择,我也不愿意这么做 FWIW,django adminfiles还嵌入了一些新功能,可以使用文件浏览器作为选择下拉列表的替代品:因此,您的模型将有一个指向“FileUpload”模型的外键,您可以通过浏览来填充该外键。这和你想要的更接近吗
我已经有一段时间不需要或使用该功能了,它没有文档记录或测试,而且自从我添加它以来,已经有很多重写,所以它可能处于工作状态,也可能不处于工作状态。但总有一天我要把它恢复到工作状态,这是我的任务清单,我当然不会反对一点积极的帮助;-) 发布这个问题后,我发现django filebrowser有一个FileBrowseWidget。应用了一些难看的黑客,我就能够在django管理员中对ImageField和FileField进行操作(不再需要模型上的
filebrowser.fields.FileBrowseField
)
我正在这样使用它(来自github的wardi),它似乎正在工作
# a few changes to filebrowser/fields.py
class FileBrowseWidget(Input):
...
# change the default value of attrs from None to {}
def __init__(self, attrs={}):
... # the rest unchanged
# change the default value of attrs, and the first few lines of render, like so
def render(self, name, value, attrs={}):
if value is None:
value = ""
else:
# set an attribute on value that the filebrowser templates need in
# order to display the thumbnail photo in the admin
for suffix in ['gif', 'GIF', 'jpg', 'JPG', 'png', 'PNG']:
if hasattr(value, 'path') and value.path.endswith("." + suffix):
value.filetype = "Image"
break
... # the rest unchanged
# admin.py
from filebrowser.fields import FileBrowseWidget
class FileBrowseForm(forms.ModelForm):
# Use a CharField, not an ImageField or FileField, since filebrowser
# is handling any file uploading
image = forms.CharField(required=True, widget=FileBrowseWidget())
class SomeModelAdmin(admin.ModelAdmin):
# SomeModel has an ImageField named image
form = FileBrowseForm
... # the rest of the admin definition
这有点难看,但目前似乎还有效。它消除了对django filebrowser的模型级依赖,并将依赖关系推送到管理员,这正是我想要的 作为@zlovelady答案的补充,我还想将django文件浏览器与模型定义分离 也许他们的代码已经改变了,但是配方已经不太管用了。为了让它工作(通过对FileBrowserWidget进行子分类),我最终得到了以下结果:
我没有使用非图形化版本,但我认为这不重要,两个版本中的相关代码看起来都一样。这更接近我要寻找的,但不完全相同。为了消除对其他应用程序的依赖,我希望我的模型能够使用CharField/FileField/ImageField。然后,文件管理器将根据用户选择使用相对路径更新CharField。看起来django adminfiles正在为文本区域中的“内联线”插入做类似的事情。如果没有其他答案出现在这里,我可能会尝试更改您的django管理员文件。(顺便说一句,这是一个不错的应用。谢谢!)如果有一个小部件,可以修改这个小部件,并将其用作
FilePathField
上的小部件,我认为这就像CharField
一样,限制了对特定路径中文件的选择。@zlovelady-这是一个非常好的分离使用方法;我不会反对将这样一个特性引入django管理员文件。@Carl Meyer-太好了。如果我着手实现它,我将在github上使用django AdminFile的fork。似乎不再需要模型中的自定义字段。
from filebrowser.base import FileObject
from filebrowser.fields import FileBrowseWidget as fb_FileBrowseWidget
from filebrowser.sites import site as filebrowser_site
class FileBrowseWidget(fb_FileBrowseWidget):
def render(self, name, value, attrs=None):
if value is None:
value = ""
else:
value = FileObject(value.name, site=self.site)
return super(FileBrowseWidget, self).render(name, value, attrs)
class FileBrowseForm(forms.ModelForm):
# Use a CharField, not an ImageField or FileField, since filebrowser
# is handling any file uploading
image = forms.CharField(
required=True,
widget=FileBrowseWidget(attrs={'site':filebrowser_site})
)