2016-01-20 99 views
0

我嘗試創建一個鏈接,下載在管理一個文件,但它不工作Django的:如何上傳文件管理

我的模型

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_'。

這是什麼問題?

回答

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" 
+0

它可以在模型中使用def file_link(self).. – Patrice

0

file_是你模型中的一個函數。您只能在字段集中顯示字段。一個有效的字段本身是file,但不是函數file_。我也會在你的模板中構建HTML,而不是在你的模型中(我甚至不確定這是否工作到目前爲止你所做的)。

假設您將對象event與您的視圖一起傳遞給您的模板。所以,你可以在你的HTML模板文件中使用:

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

我想只有在管理員打開該文件,而不是在模板 – Patrice

+0

哦好吧,對不起,不知道。但是你的錯誤之一是由'file_'造成的,它不是一個字段,而是一個函數。 – n2o

+0

好吧,我明白了 – Patrice

相關問題