Django:如何在管理员中上传文件

时间:2016-01-20 09:26:53

标签: django admin filefield

我尝试创建一个链接以在管理员中下载文件,但它不起作用

我的模特

class Event(models.Model):
    ......
    file = models.FileField(_('fichier'), upload_to='medias',  null=True,  blank=True)

    def file_(self):
        if self.file:
            return "<a href='%s'>download</a>" % (self.file.url,)
        else:
            return "No attachment"

我的管理员:

class EventAdmin(admin.ModelAdmin):

list_display = ('title', 'start', 'end', 'user', 'fin', 'frequency', 'file_',)


fieldsets = (
    (None, {
        'fields': ('title','start', 'end', 'is_cancelled', 'calendar', 'user', 'description', ('frequency', 'fin' ), 'activated', 'file_',)
    }),

我收到错误:

  

例外值:

     

'EventAdmin.fieldsets [0] [1] ['fields']'指的是字段'file_',即   从表格中遗漏。

这是什么问题?

2 个答案:

答案 0 :(得分:1)

您应该像这样定义您的管理员:

class EventAdmin(admin.ModelAdmin):

    list_display = ('title', 'start', 'end', 'user', 'fin', 'frequency', 'file_link',)


    fieldsets = (
    (None, {
        'fields': ('title','start', 'end', 'is_cancelled', 'calendar', 'user', 'description', ('frequency', 'fin' ), 'activated', 'file',)
    }),

    def file_link(self, obj):
        if obj.file:
            return "<a href='%s'>download</a>" % (obj.file.url,)
        else:
            return "No attachment"

答案 1 :(得分:0)

file_是模型中的一个函数。您只能在字段集中显示字段。有效字段本身为file,但不是函数file_

我还会在你的模板中而不是你的模型中构建HTML(我甚至不确定这是否与你迄今为止所做的一样有效)。

假设您将视图中的对象event传递给模板。因此,您可以在HTML模板文件中使用:

{% if event.file %}
    <a href="{{ event.file.url }}">Download</a>
{% else %}
    No attachment
{% endif %}