📜  ImageField – Django 模型(1)

📅  最后修改于: 2023-12-03 15:15:48.494000             🧑  作者: Mango

ImageField – Django 模型

ImageField 是 Django 模型中的一个字段类型,用于在数据库中存储图像文件的路径。它可以与 FileField 相比,支持更多的图像处理特性,如生成预览图或缩略图。

定义 ImageField

要在 Django 模型中定义 ImageField,需要使用以下代码格式:

from django.db import models

class MyModel(models.Model):
    my_image = models.ImageField(upload_to='images/')

在这个例子中,我们定义了一个名为 my_image 的字段,并将其类型设置为 ImageField。文件将被上传到 images/ 路径下。

图像处理

使用 ImageField,可以很容易地进行图像处理。Django 提供了一个名为 Pillow 的库,用于处理这些图像。

from django.db import models
from PIL import Image

class MyModel(models.Model):
    my_image = models.ImageField(upload_to='images/')

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        img = Image.open(self.my_image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.my_image.path)

在上面的例子中,我们重写了模型的 save() 方法,并使用 Pillow 库来将所有上传的图片缩小到最大尺寸为 300x300 像素。

FORMS

在表单中使用 ImageField,可以使用 Django Form Framework,和其他表单字段一样。它将上传的图像文件保存到磁盘上,并创建一个适当的记录,以访问路径。

from django import forms
from .models import MyModel

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = ('my_image',)

在这个例子中,我们创建了一个名为 MyModelForm 的表单,并将其与 MyModel 模型相关联。这个表单只包含一个 my_image 字段。

Conclusion

总之,如果你需要在 Django 模型中存储图片,使用 ImageField ,不仅可以创建与数据库对应的表,同时也可以处理您提供的图像。 然后,将它与Pillow库一起使用,可以轻松地进行图像处理。 对于表单,可以将ImageField与Django Form Framework一起使用,以便用户上传和提交图像。