gpt4 book ai didi

django - 我如何以及在哪里处理来自 django admin 的文件上传?

转载 作者:行者123 更新时间:2023-12-05 01:15:42 25 4
gpt4 key购买 nike

所以我阅读了文档,结果有点困惑。我有一个这样的模型

class Image(models.Model):
name = models.CharField(max_length=80)
file = models.ImageField(upload_to = 'project_images')
description = models.CharField(max_length=30)

def __unicode__(self):
return self.name

文件上传的处理是通过管理界面完成的,它可以工作,但我需要根据提交上传时出现的其他字段对数据做更多的事情。

基本上当前目录是project_images我想做的是保存图像时必须将其放在---> project_images/<year>/<month> .保存在数据库中的文件路径必须反射(reflect)这一点,文件名也必须保存在名称字段中。

我理解这样做背后的逻辑;

  1. 查看帖子
  2. 检查是否有效(我假设 ImageField 已经解决了这个问题)
  3. 获取文件名
  4. 获取年月(数字)
  5. 检查目录是否存在
  6. 如果目录不存在创建它,如果他们使用它们
  7. 设置名称为文件名
  8. 全部上传并保存

我应该在哪里指定它?在模型下有保存方法吗?

很抱歉,如果文档中指定了这一点,但这是文档中让我感到困惑的一个方面。

谢谢

最佳答案

from django.db import models
import datetime
import os
import uuid
# Create your models here.
def get_file_path(instance,filename):
ext=filename.split('.')[-1]
filename="%s.%s" % (uuid.uuid4(),ext)
return os.path.join(instance.directory_string_var,filename)

class Image(models.Model):
file=models.ImageField(upload_to=get_file_path)

now=datetime.datetime.now()
directory_string_var = 'image/%s/%s/%s/'%(now.year,now.month,now.day)

将您的模型更改为上述模型。

这会将您的文件以随机名称保存在文件夹 media/year/month/day 中。

如果你不希望文件名是随机的就注释掉

ext = filename.split('.')[-1] #and 
filename="%s.%s" % (uuid.uuid4(),ext)

关于django - 我如何以及在哪里处理来自 django admin 的文件上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17398716/

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