文档章节

定制FileField中的上传文件名称

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 00:42
字数 346
阅读 1
收藏 0

  FileField中的upload_to属性可以设定上传文件的存储目录和名称,它可以是个字符串,也可以是个callable,比如一个方法。

  当upload_to的值设为一个方法时,就可以对上传文件的名称进行修改了。方法需要两个参数,instance与filename,instance为此FileField所属的Model实例,filename为上传文件的名称。

  举例:

def user_directory_path(instance, filename):
    # file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
    return 'user_{0}/{1}'.format(instance.user.id, filename)

class MyModel(models.Model):
    upload = models.FileField(upload_to=user_directory_path)

 当一个类定义了__call__方法时,也可以像func一样被调用,所以,upload_to的值也可以是一个定义了__call__方法的类。

   比如,要根据上传时间为文件名加时间戳:

import hashlib
import os
import time

from django.utils.deconstruct import deconstructible


@deconstructible
class TimeStampFileName(object):
    def __init__(self, path):
        self.path = os.path.join(path, "%s%s")

    def __call__(self, instance, filename):
        extension = os.path.splitext(filename)[1]
        data = "%s_%d"%(filename,int(time.time()))
        file_hash = hashlib.sha1(data).hexdigest()
        return self.path % (file_hash, extension)

 Model中的FileField可以如下定义:

class MyModel(models.Model):
    upload = models.FileField(upload_to=TimeStampFileName('media/'), )

  当访问一个FileField字段时,得到的是一个FieldFile对象,如果要为Model设置默认文件或图片,可以设置一个默认FieldFile值:

from django.db import models
from django.db.models.fields.files import ImageFieldFile, FileField


class MyModel(models.Model):
    _img = models.ImageField(upload_to=TimeStampFileName('media/'), )

    @property
    def img(self):
        if self._img:
            return self._img
        else:
            return ImageFieldFile(instance=None, field=FileField(),
                                  name='default.png', )

    @img.setter
    def img(self, value):
        self._img = value

  

 

本文转载自:http://www.cnblogs.com/linxiyue/p/7412021.html

AllenOR灵感
粉丝 11
博文 2635
码字总数 83001
作品 0
程序员
私信 提问
android fragment webview 中的上传问题

在fragment中有个webview ,现在这个webview加载的网页中有个上传文件功能,现在发现,第一次点击 位置,可以打开文件管理器,让我们选择文件,如果回到页面,再次点击 的时候,发现没有任何...

天王盖地虎626
2015/04/30
312
1
ExtJS Form无刷新文件上传

文件上传在Web程序开发中必不可少,ExtJS Form中有一个filefield字段,用来选择文件并上传。今天我们来演示一下如何通过filefield实现ExtJS Form无刷新的文件上传。 首先,我们创建一个Form,...

鱼煎
2017/11/02
19
0
Django如何上传文件

当Django处理上传一个文件的时候,文件数据被放在request.FILES中。视图将在request.FILES中接受文件数据 ,request.FILES是一个字典,它对每个FileField(或者是ImageField,或者是其他的FileF...

四京
2017/11/07
0
0
Django管理文件

本页文档讲述Django 的文件访问API,例如用户上传的文件。这些底层的API 足够通用以致于你可以用于其它目的。如果你想要处理静态文件(JS、CSS等),参见管理静态文件(CSS和图像)。 默认情...

楠木楠
2016/10/09
745
0
java 模拟html表单(form)提交数据 包含多文件 上传 表单提交 for j2me j2s

我们先来看一下用html写简单的表单(form)是什么样的,如下: [xhtml] view plaincopy <html> <head> <title>上传文件测试页面</title> <meta http-equiv="Content-Type" content="text/html......

miscellanea
2014/06/27
3K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.4K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
41
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部