python - 使用当前模型 ID 上传 Django 管理文件

标签 python django django-models upload django-admin

我正在尝试使用默认的 Django 管理创建一个简单的照片库。我想为每个画廊保存一张样本照片,但我不想保留电影名。我不想保存文件名,而是保存模型的 ID (N.jpg)。但是第一次我要保存的对象id不存在。我怎么知道模型中的下一个自动增量,或者在使用 super.save 上传之前以某种方式保存模型数据以及在 self.id 存在时上传文件之后?有没有很酷的解决方案?

像这样:

def upload_path_handler(instance, filename):
    ext = filename extension
    return "site_media/images/gallery/{id}.{ext}".format(id=instance.nextincrement, ext=ext)

class Gallery(models.Model):
    name  = models.TextField()
    image = models.FileField(upload_to=upload_path_handler)

也许将文件名存储在不同的字段中。

最佳答案

我遇到了同样的问题。 Okm 的回答让我走上了正确的道路,但在我看来,只需覆盖模型的 save() 方法就可以获得相同的功能。

def save(self, *args, **kwargs):
    if self.pk is None:
        saved_image = self.image
        self.image = None
        super(Material, self).save(*args, **kwargs)
        self.image = saved_image

    super(Material, self).save(*args, **kwargs)

这肯定正确保存了信息。

关于python - 使用当前模型 ID 上传 Django 管理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9968532/

相关文章:

python - Pandas 数据帧 to_latex : how to fit tables on a page?

python:了解简单for循环的多处理

python - Django DB在模型中存储上传的文件是否高效?

Django - 合并两个相同应用程序的最佳方式

django-models - Django : error with "username" in my custom user model - 'UserProfile' object has no attribute 'username'

python - 将 python 时间对象插入 MySQL 表

python - 通过插入 ':' 格式化字符串

mysql - 在多个工作人员上分发推送通知

python - 使用 SUDS Python WSDL 客户端和 Django Sentry,带有 __sentry__ 属性的异常

mysql - 强制 django admin 搜索栏不区分大小写