【问题标题】:Django admin custom AdminURLFieldWidget widget misses the Browse buttonDjango 管理员自定义 AdminURLFieldWidget 小部件缺少浏览按钮
【发布时间】:2018-12-10 18:17:52
【问题描述】:

我正在尝试自定义 Django 管理员,我需要为 change_form 模板中的 FileField 记录创建自定义 URL。因此,通过谷歌搜索,我发现以下配方来自对 here 的图像字段的自定义。这是我的代码:

class MyAdminURLFieldWidget(URLInput):
    template_name = 'admin/widgets/url.html'

    def __init__(self, attrs=None):
        final_attrs = {'class': 'vURLField'}
        if attrs is not None:
            final_attrs.update(attrs)
        super(MyAdminURLFieldWidget, self).__init__(attrs=final_attrs)


    def get_context(self, name, value, attrs):
        context = super(MyAdminURLFieldWidget, self).get_context(name, value, attrs)
        context['current_label'] = _('Currently:')
        context['change_label'] = _('Change:')                  
        context['widget']['href'] = smart_urlquote('/DownloadView/' + str(value.instance.id) + '/attachment/') if value else ''
        return context


class FilesAdmin(admin.ModelAdmin):
    list_display = ('id', '_animalid', '_filename', '_filedesc', '_ispublic', 'extra_info')
    search_fields = ('subjectid__animalid',)
    list_per_page = 50

    def formfield_for_dbfield(self, db_field, **kwargs):                                
        if db_field.name == 'filename':
            request = kwargs.pop("request", None)
            kwargs['widget'] = MyAdminURLFieldWidget            
            return db_field.formfield(**kwargs)         
        else:
            return super(FilesAdmin, self).formfield_for_dbfield(db_field, **kwargs)

但是,表单显示的字段没有“浏览”按钮:

我想要类似默认的东西:

那么,如何让Browse 按钮出现在我的自定义小部件中?

【问题讨论】:

    标签: django django-forms django-templates django-admin


    【解决方案1】:

    再次向迷失的 Django 社区问好,

    在这里,我再次提出自己的答案。问题是final_attrs 必须是final_attrs = {'type': 'file'}

    不客气(再次)。

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 2015-01-06
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-09
      • 2011-10-09
      相关资源
      最近更新 更多