我希望文件名是随机的,因此我使用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)
Run Code Online (Sandbox Code Playgroud)
但是我想将原始文件名保存到模型内的属性中.这样的东西不起作用:
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)
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
谢谢.
发布的代码通常有效,也许实际的代码是
class FooModel(models.Model):
filename = models.CharField(max_length=128)
file = models.FileField(upload_to=get_random_filename)
Run Code Online (Sandbox Code Playgroud)
注意切换上面字段的顺序.
这不起作用,因为:当需要实际值时,由代码中upload_to()
的pre_save()
,此处调用FileField
.你可以发现,分配到属性filename
的upload()
是第一个参数的生成后,filename
在插入SQL.因此,赋值不会在生成的SQL中生效,只会影响实例本身.
如果这不是问题,请发布您在shell中输入的代码.
归档时间: |
|
查看次数: |
5103 次 |
最近记录: |