讓我把這樣的:對於有效的文件,Django FileField(或ImageField)的open()方法返回None?
model.py:
class Task(models.Model):
...
seq_file = models.FileField(upload_to='files/', blank=True, null=True)
...
ajax.py(我使用dajaxice,但它並不重要):
...
def startTask(request, name):
task = Task.objects.get(task_name=name)
data = task.seq_file.open()
filename = os.path.join(settings.MEDIA_ROOT ,task.seq_file.name)
if not os.path.isfile(filename):
raise Exception, "file " + filename + " not found."
sequences = parser.parse(data.read())
...
這個回報:
File "/home/mnowotka/Dokumenty/MgrFuncAdnot/app/django-gui/src/gui/ajax.py", line 43, in startTask
sequences = parser.parse(data.read())
AttributeError: 'NoneType' object has no attribute 'read'
但:
...
def startTask(request, name):
task = Task.objects.get(task_name=name)
filename = os.path.join(settings.MEDIA_ROOT ,task.seq_file.name)
if not os.path.isfile(filename):
raise Exception, "file " + filename + " not found."
data = open(filename)
sequences = parser.parse(data.read())
...
完美地工作! 爲什麼?
(我使用Django 1.3)
那麼FileField open()的目的是什麼? – mnowotka 2012-02-23 22:17:24
不幸的是,Django文檔在這一點上目前是誤導性的:「像標準Python open()方法一樣......」 - https://docs.djangoproject。com/en/1.4/ref/models/fields /#filefield-and-fieldfile 不,在執行神祕的內部打開操作後返回None不是標準的Python行爲。 – 2012-09-20 03:20:32
應該對此提出問題。 – laike9m 2013-09-29 00:27:54