我正在尝试实现一个视图,其中已上传文件的登录用户可以下载他的文件,但只能下载他的文件,而不是其他用户文件,因此我不会根据文件的 pk 创建 id url。作为视图的结果,我查询了 test_result_file 表,并为特定用户过滤了它。我认为我可以通过在我的模型中编写一个函数来做我想做的事情:
class test_result_file(models.Model):
user=models.ForeignKey(User)
system=models.ForeignKey(system)
test_id=models.ForeignKey(Detail)
path=models.CharField(max_length=300)
class Meta:
verbose_name="Test Result file"
verbose_name_plural="Test Result files"
def get_self(self):
path=self.path
wrapper = FileWrapper(open( path, "r" ))
response=HttpResponse(wrapper, content_type="text/plain")
response['Content-Disposition'] ='attachment; filename="results.txt"'
return response
但是,在模板中,当我调用时:
<ul>
{% for at in attempts %}
<li>System Name: <em>"{{ at.system}}"</em>, download file: <a href="{{at.get_self}}">here</a> </li>
{% endfor %}</ul>
没有提供下载,而是浏览器尝试打开一个包含所有响应参数的 url,但失败了。我失去了什么吗?这个功能可行吗?