让我这样说:
model.py:
class Task(models.Model):
...
seq_file = models.FileField(upload_to='files/', blank=True, null=True)
...
Run Code Online (Sandbox Code Playgroud)
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())
...
Run Code Online (Sandbox Code Playgroud)
这会返回:
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'
Run Code Online (Sandbox Code Playgroud)
但:
...
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())
...
Run Code Online (Sandbox Code Playgroud)
完美运作!为什么?
(我正在使用django 1.3)
小智 29
因为模型的open方法.FileField不返回任何内容
你可以使用:
task.seq_file.read()
Run Code Online (Sandbox Code Playgroud)
并且您不需要计算文件路径来检查文件是否存在.你可以使用task.seq_file.path:
if not os.path.isfile(task.seq_file.path):
....
Run Code Online (Sandbox Code Playgroud)