首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >upload_to参数?

upload_to参数?
EN

Stack Overflow用户
提问于 2013-06-24 10:53:48
回答 2查看 1K关注 0票数 0

我希望将文件上传到动态分配的目录,具体取决于从MySQL数据库检索的用户。uploads_to函数根据文档只接受两个参数,所以我假设不能注入另一个变量来完成返回的路径字符串?代码片段如下:

models.py

代码语言:javascript
复制
def item_uploads_to(instance, filename, userName):
    return '/home/' + userName would go here + '/path/to/uploads/' + filename

class Document2(models.Model):
    docfile2 = models.FileField(upload_to=item_uploads_to)

views.py

代码语言:javascript
复制
 userName = 'python' # this is a test value, working DB query code goes here
 item_uploads_to(instance, filename, userName) 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-24 10:59:13

你不能马上就做,因为你不能传递额外的参数。但是您可以将用户添加到要保存的实例中,这样您就可以通过执行instance.user.username甚至instance.username来获得它。

在您的创建代码中,您将得到如下内容:

代码语言:javascript
复制
doc = Document2(random stuff but no docfile2)
doc.username = userName
doc.docfile2 = theFile
doc.save()
票数 1
EN

Stack Overflow用户

发布于 2022-06-23 06:44:47

对于我的puprose,我使用类和一些方法来调用,对于各种参数使用__init__方法,例如:

代码语言:javascript
复制
class UploadTo:
    def __init__(self, folder = None):
        self.folder = folder
    def save_path(self, instance, filename):
        return f"/path/to/{folder}/{filename}"

使用:

代码语言:javascript
复制
class Document2(models.Model):
    docfile2 = models.FileField(upload_to=UploadTo(folder=userName).save_path

注意:每次运行makemigrations时,这种方法都会生成新的迁移。它不会改变任何东西,但会创建新的迁移文件。就我而言,我以不同的方式处理这件事,取决于具体情况。

另一种方法是在模型本身内定义属性或方法,然后从instance获取它。

代码语言:javascript
复制
class Document2(models.Model):
    docfile2 = models.FileField(upload_to=item_uploads_to)
    @property
    def user_name(self):
        return userName

然后,这个值可以从函数中得到:

代码语言:javascript
复制
def item_uploads_to(instance, filename):
    return '/home/' + instance.user_name + '/path/to/uploads/' + filename
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17273740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档