gpt4 book ai didi

python - 在 FileField upload_to 函数中使用主键的值

转载 作者:行者123 更新时间:2023-12-05 05:31:38 24 4
gpt4 key购买 nike

鉴于以下模型,我尝试在 upload_to 路径中使用模型 ID 字段(一个 UUID),但它被定义为 None,大概是因为它当时还没有生成。

如果我使用未定义为主键的 UUID 字段,它可以正常工作。

如何在运行 picture_path 时获取 id 字段的值?

# models.py

class Foo(models.Model)

def picture_path(instance, filename):
return 'pictures/{0}/{1}'.format(instance.id, filename)

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
picture = models.ImageField(upload_to=picture_path, null=True, blank=True)

(我知道 django 会自动附加随机字符以避免重复的文件名,这是一个故意简化的示例,在实际应用中需要将每个模型文件保存在一个单独的文件夹中)

最佳答案

因为在您的示例中主键生成为 uuid4 并且不依赖于数据库计数器 - 您可以安全地预先生成它。

换句话说 - 你不必等待数据库插入获得主键 - 你可以自己制作它然后插入数据库(非常确定它是唯一的 - 因为它是 uuid4 )

因此,在代码中修复将是:

def picture_path(instance, filename):
instance.id = str(uuid.uuid4())
return 'pictures/{0}/{1}'.format(instance.id, filename)

调用 picture_path 是在 save 之前完成的。当 save id 从外部填充时 - 它不会被 Django 覆盖。

关于python - 在 FileField upload_to 函数中使用主键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74327498/

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