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/
转载文章受原作者版权保护。转载请注明原作者出处!