]FWIW, django-adminfiles также похоронил в нем некоторую зарождающуюся функциональность для использования файл-браузера в качестве замены: так что ваша модель будет иметь ForeignKey к модели "FileUpload", и вы сможете просмотреть, чтобы заполнить этот ForeignKey. Это ближе к тому, что вы ищете?[
] []Я не нуждался и не пользовался этой функцией довольно долгое время, она не документирована и не тестировалась, и с тех пор, как я ее добавил, было много переписывалось, так что она может быть в рабочем состоянии, а может и нет. Но на днях она будет в моём списке todo, чтобы вернуть её в рабочее состояние, и я, конечно же, не буду возражать против небольшой мотивированной помощи ;-)[
]. После отправки вопроса я обнаружил, что в django-filebrowser есть FileBrowseWidget. Применив несколько уродливых хаков, я смог заставить его работать у администратора django на ImageField и FileField (на модели больше не требуется filebrowser.fields.FileBrowseField
).
Я использую его таким образом (с помощью не зависящего от грэппелли django-файлброузера из wardi at github), и, похоже, он работает.
# 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 и подталкивает эту зависимость к администратору, именно там, где я хотел.