麻烦django upload_to可调用

时间:2014-05-30 22:15:46

标签: python django

我正在根据模型实例将文件上传到动态路径。这是我的示例代码:

class Test(models.Model):
    def _upload_to(instance, filename):
        return '/'.join([instance.username.name, filename])

    username = models.ForeignKey(UserModel) #defined elsewhere
    file = models.FileField(upload_to=_upload_to)

然后测试它:

>>> t = Test(file="myfile.txt")
>>> t.save()

但它似乎没有把它放在正确的道路上,因为我仍然得到:

>>> t.file.url
/media/myfile.txt

什么时候应该

/media/someusername/myfile.txt

这个例子有什么问题?

1 个答案:

答案 0 :(得分:1)

您的测试实际上并未正确测试。上传文件时会调用upload_to callable,顾名思义,而不是在您只是保存模型时。您需要尝试实际上传:或者尝试通过管理站点。

当你这样做时,你几乎肯定会遇到问题,因为Python会认为函数是一个实例方法,因为你已经在类中定义了它。您需要将其带到课外,或者使用@staticmethod进行装饰。