Django文件类型字段FileField和ImageField

class FileField(upload_to=None, max_length=100, **options)
一个文件上传字段。

请注意
primary_key参数不受支持,如果使用它将引发一个错误。

有两个可选参数:

FileField.upload_to

这个属性提供了一种设置上传目录和文件名的方法,可以通过两种方式进行设置。在这两种情况下,值都被传递给Storage.save()方法。

如果指定一个字符串值,它可能包含strftime()格式,该格式将被文件上传的日期/时间所取代(这样上传的文件就不会填满给定的目录)。例如:

class MyModel(models.Model):

    upload = models.FileField(upload_to='uploads/')

    upload = models.FileField(upload_to='uploads/%Y/%m/%d/')

如果您使用的是默认的FileSystemStorage,则该字符串值将被附加到MEDIA_ROOT路径中,以在本地文件系统上形成存储上传文件的位置。如果您使用的是不同的存储,请检查该存储的文档,看看它是如何处理upload_to的。

Upload_to也可以是一个可调用对象,比如一个函数。这将被调用以获得上载路径,包括文件名。这个可调用对象必须接受两个参数并返回一个unix风格的路径(带有斜杠),该路径将被传递给存储系统。

def user_directory_path(instance, filename):

    return 'user_{0}/{1}'.format(instance.user.id, filename)

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

一个存储对象,用来处理文件的存储和检索。

class ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)
从FileField继承所有属性和方法,但也验证上传的对象是一个有效的图像。
除了FileField可用的特殊属性外,ImageField也有高度和宽度属性。
为了方便查询这些属性,ImageField有两个额外的可选参数:

ImageField.height_field

模型字段的名称,它将在每次保存模型实例时自动填充图像的高度。

ImageField.width_field

模型字段的名称,它将在每次保存模型实例时自动填充图像的宽度。

依赖Pillow模块。

ImageField实例在数据库中创建为varchar列,默认最大长度为100个字符。与其他字段一样,可以使用max_length参数更改最大长度。

该字段的默认表单小部件是ClearableFileInput。


from django.db import models

class Car(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    photo = models.ImageField(upload_to='cars')
    json_file = models.FileField(upload_to='cars')

from django.core.files import File
from django.core.files.base import ContentFile

...

car = Car.objects.get(name="Chevy")
f = open('chevy.jpg', 'rb')
myfile = File(f)

car.photo.save('chevy.jpg', myfile, save=False)
car.save()

car.photo.save('chevy.jpg', myfile, save=True)

car = Car.objects.get(name="Chevy")
json_data = json.dumps({'name': 'Chevy'}, ensure_ascii=False)
car.text_file.save('chevy.json', ContentFile(json_data))
...

文件对象属性

>>> car = Car.objects.get(name="Chevy")
>>> car.photo
<ImageFieldFile: chevy.jpg>
>>> car.photo.name
'cars/chevy.jpg'
>>> car.photo.path
'/media/cars/chevy.jpg'
>>> car.photo.url
'http://media.example.com/cars/chevy.jpg'
>>>

删除文件

File.delete(save=True/False)
从模型实例中删除该文件对象并删除文件。如果save为True,一旦文件被删除,模型的save()方法将被调用。

>>> car = Car.objects.get(name="Chevy")
>>> car.photo.delete(save=True)

Original: https://blog.csdn.net/llf_cloud/article/details/116060125
Author: llf_cloud
Title: Django文件类型字段FileField和ImageField

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/737322/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球