Python Django:如何根据实例 pk 上传文件名

2024-03-26

我有一个我认为很简单的问题。在我的模型中,我有一个 models.ImageField ,如下所示:

class CMSDocument(BaseItem):
    thumb = models.ImageField(upload_to= './media/',blank=True)

但我想上传到'.media/' + self.pk+ '.png'我尝试更新模型的 save 方法中的字段,但这不起作用,因为调用“save”时不知道 pk。我还尝试按照此处的建议为 upload_to 添加自定义函数:Django:有什么方法可以在不诉诸魔法的情况下更改 FileField 的“upload_to”属性吗? https://stackoverflow.com/questions/21690764/django-any-way-to-change-upload-to-property-of-filefield-without-resorting-to。但这只会让这个领域变得空虚。我能做些什么?

编辑:我使用 Django 1.6

编辑:我使用了一个不太好的 post_save 信号:

def video_embed_post_save(sender, instance=False, **kwargs):    
    document = DocumentEmbedType.objects.get(pk=instance.pk)    
    new_thumb = "media/%s.png" % (document.pk,)
    if not document.thumb == new_thumb:
        document.thumb = new_thumb
        document.save()
    ...

主键由数据库分配,因此您必须等待模型行保存在数据库上。

首先将数据分为两个模型,缩略图位于子模型上:

from django.db import models

from .fields import CMSImageField


class CMSDocument(models.Model):
    title = models.CharField(max_length=50)


class CMSMediaDocument(CMSDocument):
    thumb = CMSImageField(upload_to='./media/', blank=True)

如您所见,我使用缩略图的自定义字段而不是 ImageField。

然后创建一个 fields.py 文件,您应该在其中重写 ImageField 继承的 FileField 类的 pre_save 函数:

from django.db import models


class CMSImageField(models.ImageField):
    def pre_save(self, model_instance, add):

        file = super(models.FileField, self).pre_save(model_instance, add)

        if file and not file._committed:
            # Commit the file to storage prior to saving the model
            file.save('%s.png' % model_instance.pk, file, save=False)
        return file

由于 CMSMediaDocument 继承自 CMSDocument 类,因此在调用 pre_save 时,渐进式 PK 已保存在数据库中,因此您可以从模型_实例.

我测试了代码,应该可以正常工作。

测试中使用的admin文件:

from django.contrib import admin

from .models import CMSMediaDocument

admin.site.register(CMSMediaDocument)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Django:如何根据实例 pk 上传文件名 的相关文章

  • 基于类的通用视图额外的上下文

    在基于类的视图之前 有一个可以在 urlsconf 中传递的 extra context 关键字 https docs djangoproject com en 1 3 topics generic views adding extra c
  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • 在 Jupyter Notebook 中设置环境变量的不同方法

    在某些情况下 我在 Windows 10 计算机上使用 Jupyter 笔记本 我想通过设置环境变量 GOOGLE APPLICATION CREDENTIALS 来向 GCP 进行身份验证 我想知道 这两种设置环境变量的方式有什么区别 当
  • 如何在seaborn热图标签中使用科学计数法?

    我正在尝试在 python 中使用seaborn 获取热图 不幸的是 即使数字非常大 它也没有使用科学记数法 我想知道是否有任何简单的方法可以转换为科学记数法或任何其他合理的格式 这是显示问题的一段代码 import seaborn as
  • 计算熊猫数据帧几个月的总和

    我有一个 pandas 数据框 如下所示 ID Year R1 R1 f KAR1 20201001 1 5 KAR1 20201101 2 6 KAR1 20201201 3 7 KAR1 20210101 4 8 KAR1 202102
  • 如何调试 numpy 掩码

    这个问题与this one https stackoverflow com q 73672739 11004423 我有一个正在尝试矢量化的函数 这是原来的函数 def aspect good angle float planet1 goo
  • 将多索引转换为行式多维 NumPy 数组。

    假设我有一个类似于以下示例的 MultiIndex DataFrame多索引文档 http pandas pydata org pandas docs stable advanced html gt gt gt df 0 1 2 3 fir
  • 在 Google App Engine 上运行的最佳 Django 功能?

    我正在 App Engine 上启动一个新项目 并且布兰登的建议 https stackoverflow com questions 485178 architecture guidance for appengine websites 5
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • Jupyter笔记本突然变得很慢

    我以前在anaconda环境下运行jupyter运行得很好 显示警告后 IOPub data rate exceeded The notebook server will temporarily stop sending output to
  • 使用 Windows 任务计划程序安排 [Virtualenv 相关] Python 脚本

    I want to schedule a python script to start at 3AM and break at 5PM every weekday However the problem arises when I need
  • 我可以在 if 语句中使用“as”机制吗

    是否可以使用as in if类似的声明with我们使用的 例如 with open tmp foo r as ofile do something with ofile 这是我的代码 def my list rtrn lst True if
  • Django 手动检查 CSRF 令牌

    我正在实现一个可与 API 密钥或 CSRF 令牌配合使用的 API 目标是使其可由 Web 应用程序 受 CSRF 保护 或第三方应用程序 受 API 密钥保护 使用 基本上 对于每个请求 全部通过 POST 我都会检查是否有 API 密
  • 操作错误:尝试在 ubuntu 服务器中写入只读数据库

    我正在使用 FlaskApp 运行mod wsgi and apache2在 Ubuntu 服务器上 我尝试运行烧瓶应用程序localhost成功 然后部署到ubuntu服务器上 但是当我尝试更新数据库时 出现错误 Failed to up
  • 无法将matplotlib安装到pycharm

    我最近开始使用Python速成课程学习Python编程 我陷入困境 因为我无法让 matplotlib 在 pycharm 中工作 我已经安装了pip 我已经通过命令提示符使用 pip 安装了 matplotlib 现在 当我打开 pych
  • 在 for 循环中访问 itertools 产品的元素

    我有一个列表列表 是附加 itertools 产品的一些其他结果的结果 我想要的是能够使用 for 循环访问列表列表中列表的每个元素 但我无法访问所有元素 我只能访问最后一个列表的元素 结果是一个非常巨大的列表列表 例如 1 2 4 3 6
  • 重定向 python 交互式帮助()

    我正在为使用 Qt 的应用程序开发交互式 python shell 但是我似乎无法获得重定向的交互式帮助 我的 python 代码中有这个 class OutputCatcher def init self self data def wr
  • 使用 Sphinx 时,如何记录没有文档字符串的成员?

    我正在为我发布的包编写文档 我发现您的文档越全面 人们就越容易找到您的包来使用 废话 实际上 我在充满爱心地编写代码的所有功能和细节方面获得了很多乐趣 然而 我对如何为类级变量编写与 Sphinx 兼容的文档感到完全困惑 特别是 我有一些e
  • 在 anaconda 环境下运行 qsub

    我有一个程序 通常在 Linux 的 conda 环境中运行 因为我用它来管理我的库 指令如下 source activate my environment python hello world py 我怎样才能跑你好世界 py在与 PBS
  • 为什么我的 PyGame 应用程序根本不运行?

    我有一个简单的 Pygame 程序 usr bin env python import pygame from pygame locals import pygame init win pygame display set mode 400

随机推荐

  • 在我的应用程序中包含 jpeg 插件

    我制作了一个加载 jpeg 文件的 Qt GUI 应用程序 在我安装了 QtSDK 4 7 3 的开发系统 Win7 上 它可以工作 当我将应用程序和一些必需的 dll 如 QtGui4 dll 等 移动到另一个未安装 QtSDK 的系统时
  • 将多个数据帧合并为一个扩展帧

    我有一个数据帧列表 其中每个帧都包含单个系统的相同类型的测量值 例如 system1 file cumSize cumloadTime query1 1 data data1 dat 100000 158 1000 0 4333333 2
  • 动态加载和动态链接的区别?

    例程在被调用之前不会被加载 所有例程都以可重定位加载格式保存在磁盘上 主程序被加载到内存中并被执行 这称为动态链接 为什么这称为动态链接 不应该是动态加载吗 因为在动态加载中调用例程之前不会加载 而在动态链接中 链接会推迟到执行时 此答案假
  • 使用 python 登录 quora

    我尝试使用 python 登录 quora 但它给了我以下错误 urllib2 HTTPError HTTP Error 500 Internal Server Error 到目前为止 这是我的代码 我也在代理后面工作 import url
  • 如何在 FSharp 中对数组的 XML 序列化

    这就是我要找的
  • Git分支没有跟踪信息

    git pull 之后我得到这个输出 There is no tracking information for the current branch Please specify which branch you want to merge
  • 如何在 NSIS 中使用 try catch

    您好 我在安装时在 nsis 安装程序中的几台机器上遇到了奇怪的错误 使用 fontreg nsh 安装字体时给出 无效的 win32 文件句柄 我试过谷歌但没有得到这个问题的答案 现在我正在考虑抑制此消息 那么有什么方法可以抑制此消息 或
  • 数据绑定 Kendo UI 网格后保留展开的行

    这是我第一次使用 Kendo UI 我有一个带有子节点的 Kendo UI 网格 我想在数据绑定后保留扩展的行 现在 在子项中添加一行后 它会折叠起来 我尝试过来自的建议here https stackoverflow com questi
  • 是否可以为 geom_point 和 geom_segment 添加图例?

    我想知道是否可以添加图例geom point and geom segment 从 geom point 我自动获取图例 但是我不知道如何添加图例geom segment 我努力了scale linetype manual但显然它不起作用
  • MVC 是编写 ASP.NET 应用程序的最佳方式吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 更新 我知道没有一种最好的方法可以做所有事情 抱歉没有马上说出来 在数据访问教程的背景下 如果您必须执行他在该教程中所做的项目 如果您必须选择其
  • 如何使用MySQL全文搜索短语而不是使用LIKE

    如何使用 mysql 全文搜索来搜索短语而不是 like SELECT description FROM t WHERE info LIKE Search phrase one OR info LIKE Phrase second OR i
  • 传递 lambda 或异步 lambda 来执行?有权衡吗? [复制]

    这个问题在这里已经有答案了 我试图理解将 lambda 传递到执行 lambda 的异步方法的两种方法的后果 下面的示例总结了这两种方法 在第一种方法中 lambda 本身是异步的 而在第二种方法中则不是 虽然这是一个人为的示例 但我试图确
  • 实体框架代码优先:如何确定运行时用于导航属性的外键属性?

    我有一个实体框架 Code First DbContext 配置了以下实体 在此示例中 Bar 类是 Foo 类的子类 public class Foo public Guid Id get set public virtual IColl
  • 将对象转换或转换为字符串

    如何将任何对象类型转换为字符串 let single result results i var result result single result valueForKey Level 现在我收到错误 无法将任何对象类型的值分配给字符串类
  • 在 OpenCV 中,cv2.filter2D() 需要什么数据类型?

    我正在自学边缘检测器 并且正在尝试使用 OpenCVfilter2D实现我自己的梯度计算器 类似于cv2 Sobel 在 OpenCV 的 Python 接口中 cv2 filter2D 允许用户使用自定义过滤器对图像进行卷积 在 Open
  • TensorFlowOpLayer 弄乱了 TensorBoard 图表

    这个问题是关于 TensorFlow 和 TensorBoard 版本 2 2rc3 的 但我在 2 1 版本中遇到了同样的问题 这是问题的延续 由于 Python 操作导致 TensorBoard 图混乱 https stackoverf
  • 为什么原子操作被认为是线程安全的?

    原子操作如何成为线程安全的 我读过有关该主题的内容维基百科关于线程安全的文章 http en wikipedia org wiki Thread safety 但文章并没有真正解释幕后的过程 换句话说 为什么线程A执行的 原子 操作不能被线
  • 无法启动 Electron 应用程序 - 缺少 package.json

    我目前正在做一个 Python 项目 我想在 Electron 应用程序中显示我的结果 我在 YouTube 上看过一个关于如何在 Mac 上设置 Electron 的演示视频 该视频展示了在终端中执行的 3 个简单步骤 git clone
  • R中的多个不同的随机样本

    我是 R 新手 我有一个问题 choice lt c TRUE FALSE FALSE FALSE rep sample choice size 4 replace FALSE times n 总是重复相同的向量 例如 错误 正确 错误 错
  • Python Django:如何根据实例 pk 上传文件名

    我有一个我认为很简单的问题 在我的模型中 我有一个 models ImageField 如下所示 class CMSDocument BaseItem thumb models ImageField upload to media blan