gpt4 book ai didi

python - Django:如何在 FileField 中保存原始文件名?

转载 作者:太空狗 更新时间:2023-10-29 17:49:03 24 4
gpt4 key购买 nike

我希望文件名是随机的,因此我使用 upload_to 函数返回一个随机文件名,如下所示:

from uuid import uuid4
import os
def get_random_filename(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (str(uuid4()), ext)
return os.path.join('some/path/', filename)

# inside the model
class FooModel(models.Model):
file = models.FileField(upload_to=get_random_filename)

但是我想将原始文件名保存到模型中的一个属性中。这样的事情不起作用:

def get_random_filename(instance, filename):
instance.filename = filename
ext = filename.split('.')[-1]
filename = "%s.%s" % (str(uuid4()), ext)
return os.path.join('some/path/', filename)

# inside the model
class FooModel(models.Model):
file = models.FileField(upload_to=get_random_filename)
filename = models.CharField(max_length=128)

我该怎么做?

谢谢。

最佳答案

发布的代码正常工作,也许实际代码是

class FooModel(models.Model):
filename = models.CharField(max_length=128)
file = models.FileField(upload_to=get_random_filename)

注意上面字段顺序的切换。

这是行不通的,因为:upload_to()pre_save() 调用,here in the code ,当需要 FileField 的实际值时。你会发现 upload() 中对属性 filename 的赋值是在插入 sql 中第一个参数 filename 生成之后。因此,该赋值不会在生成的 SQL 中生效,只会影响实例本身。

如果这不是问题,请发布您在 shell 中键入的代码。

关于python - Django:如何在 FileField 中保存原始文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com