2010-08-17 20 views
21

Ben FileField benim diskten bir dosyayı atamak çalışıyordu, ama bu hata var:Django'da FileField'a yerel dosya nasıl atanır?

AttributeError:

pdfImage = FileSaver() 
pdfImage.myfile.save('new', open('mytest.pdf').read()) 
: 'str' nesne hiçbir özelliği 'ni açmak'

Benim piton kodu vardır

ve benim models.py

class FileSaver(models.Model): 

    myfile = models.FileField(upload_to="files/") 

    class Meta: 
     managed=False 

Yardımlarınız için şimdiden teşekkür ederim

cevap

32

Django, file type (görsel olarak geliştirilmiş bir işlevsellik ile) kullanır. Neyse Django'nun dosya türü, decorator gibi çalışır, bu yüzden Django API'sinin gereksinimlerini karşılamak için mevcut dosya nesnelerine sarmanız yeterlidir.

from django.core.files import File 

local_file = open('mytest.pdf') 
djangofile = File(local_file) 
pdfImage.myfile.save('new', djangofile) 
local_file.close() 

Sen elbette (daha az bir satır) Aşağıdaki yazarak anında dosyayı dekore edebilirsiniz:

pdfImage.myfile.save('new', File(local_file))`. 
+3

muhtemelen kötü bir fikir üzerine yazarak. File_ –

+7

Kullanmak için Daha İyi Sadece yukarıdaki açıklamayı açıklamak için (biraz kafam karışmıştı) Aaron, iletilen argümanın türü yerine 'dosya' (yani değişkenin adı) hakkında konuşuyor. – Joe

İlgili konular