我正在根据模型实例将文件上传到动态路径。这是我的示例代码:
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
这个例子有什么问题?
答案 0 :(得分:1)
您的测试实际上并未正确测试。上传文件时会调用upload_to callable,顾名思义,而不是在您只是保存模型时。您需要尝试实际上传:或者尝试通过管理站点。
当你这样做时,你几乎肯定会遇到问题,因为Python会认为函数是一个实例方法,因为你已经在类中定义了它。您需要将其带到课外,或者使用@staticmethod
进行装饰。