2016-11-20 90 views
0

我試圖在更新文件內容時在我的UpdateView中保留相同的FileField的文件名。如何更新ContentFile的內容(通過覆蓋文件)

這是一個css文件,CreateView通過使用表單數據作爲上下文呈現模板來生成。下面是邏輯的摘錄:

instance = form.save(commit=False) 
t = TemplateResponse(self.request, 'base.css', {"cssform": form}) 
t.render() 
css_string = t.content 
file_content = ContentFile(css_string) 
instance.css_file.save(file_name, file_content) 

我並沒有以相同的成功UpdateView

def form_valid(self, form): 
    instance = self.object 
    filename = instance.css_file 
    t = TemplateResponse(self.request, 'base.css', {"cssform": form}) 
    t.render() 
    css_string = t.content 
    filedata = ContentFile(css_string) 
    instance.css_file.save(filename, filedata) 
    super(CSSUpdate, self).save(form) 

的錯誤是:

join()方法的參數必須str的或字節,而不是'FieldFile'

該行發生錯誤:

instance.css_file.save(filename, filedata) 

回溯短:

回溯:

文件 「/usr/lib/python3.5/posixpath.py」 中加入 82.如果b.startswith(SEP ):

如何用我的新內容覆蓋舊文件? 我使用django 1.10,python 3.5

回答

1

instance.css_file是一個FieldFile對象,而不是文件名。您應該改用名稱:

def form_valid(self, form): 
    instance = self.object 
    filename = instance.css_file.name 
    ... 
    instance.css_file.save(filename, filedata) 
    super(CSSUpdate, self).save(form)