Django中如何识别文件上传对应的模型字段以自定义存储路径
解决Django ImageField按字段指定存储文件名的问题
要实现以模型实例uuid为目录,不同ImageField字段对应固定文件名的存储需求,你可以通过闭包工厂函数给每个字段的upload_to绑定专属标识,具体实现如下:
实现步骤
- 定义一个工厂函数,接收文件名前缀参数(如
en/sp),返回对应的路径生成函数 - 在模型的每个ImageField中,调用工厂函数生成专属的
upload_to函数
完整代码示例
def image_directory_path_factory(prefix): def _image_directory_path(instance, filename): # 生成路径:uuid目录/前缀.png return f"{instance.uuid}/{prefix}.png" return _image_directory_path class TreatyParagraph(CommentMixin, models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) english = models.TextField(blank=False, null=False, default="") english_img = models.ImageField( blank=True, null=False, default="", upload_to=image_directory_path_factory('en') ) spanish = models.TextField(blank=True, null=False, default="") spanish_img = models.ImageField( blank=True, null=False, default="", upload_to=image_directory_path_factory('sp') )
效果说明
当上传文件时:
english_img的文件会被存储到[uuid]/en.pngspanish_img的文件会被存储到[uuid]/sp.png
完全匹配你期望的目录结构。
内容的提问来源于stack exchange,提问作者Kifsif
相关产品推荐
相关产品推荐

