Можно ли рекомендовать хороший django файловый менеджер для администратора? [закрытый]

9
задан zlovelady 8 January 2010 в 19:31
поделиться

2 ответа

[

]FWIW, django-adminfiles также похоронил в нем некоторую зарождающуюся функциональность для использования файл-браузера в качестве замены: так что ваша модель будет иметь ForeignKey к модели "FileUpload", и вы сможете просмотреть, чтобы заполнить этот ForeignKey. Это ближе к тому, что вы ищете?[

] [

]Я не нуждался и не пользовался этой функцией довольно долгое время, она не документирована и не тестировалась, и с тех пор, как я ее добавил, было много переписывалось, так что она может быть в рабочем состоянии, а может и нет. Но на днях она будет в моём списке todo, чтобы вернуть её в рабочее состояние, и я, конечно же, не буду возражать против небольшой мотивированной помощи ;-)[

].
2
ответ дан 3 November 2019 в 07:13
поделиться

После отправки вопроса я обнаружил, что в 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 и подталкивает эту зависимость к администратору, именно там, где я хотел.

1
ответ дан 3 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: