📅  最后修改于: 2023-12-03 15:01:22.983000             🧑  作者: Mango
在 Django 中, ImageField 是一种可用于表单的字段类型,用于添加和保存图像文件。可以将它添加到 Django 模型表单中以允许上传和保存图像文件。
使用 ImageField 很容易。以下是如何将它添加到 Django 模型表单中:
from django.db import models
class MyModel(models.Model):
image = models.ImageField(upload_to='images/')
在这个例子中,upload_to
是可选参数,它决定了上传的图像存储在哪里。在这个例子中,图像将上传到名为 images/
的子目录中。
要将 ImageField 添加到表单中,我们可以使用 django.forms.ImageField
类。以下是一个完整的例子:
from django import forms
from myapp.models import MyModel
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('image',)
image = forms.ImageField()
注意,我们将 ImageField 添加到表单字段中,而不是 Django 数据库模型中。这是一种允许用户上传并保存图像文件的简单方法。
如果需要限制上传图像的大小,可以使用 validators
参数。以下是一个例子:
from django.core.validators import FileExtensionValidator, FileSizeValidator
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('image',)
image = forms.ImageField(validators=[FileSizeValidator(1024*1024*2), FileExtensionValidator(['png', 'jpg'])])
在这个例子中,我们使用了 validators
参数来限制上传的图像大小为 2MB,以及只允许上传扩展名为 'png' 和 'jpg' 的文件。
为了在表单中预览上传的图像,我们可以使用以下代码:
from django.forms.widgets import ClearableFileInput
class ImageWidget(ClearableFileInput):
template_with_initial = '<br/>'.join(('%(input)s', '%(image)s', '%(clear_template)s',))
def render(self, name, value, attrs=None, renderer=None):
template_with_initial = self.template_with_initial
substitutions = {
'input': super().render(name, value, attrs),
'image': '<img src="%s" alt="%s" style="max-width: 800px; max-height: 800px;"/>' % (value.url, value),
'clear_template': '',
}
if not self.is_required:
clear_checkbox_name = self.clear_checkbox_name(name)
substitutions['clear_template'] = ClearableFileInput.clear_checkbox_tag(clear_checkbox_name)
return mark_safe(template_with_initial % substitutions)
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('image',)
image = forms.ImageField(widget=ImageWidget)
在这个例子中,我们定义了一个名为 ImageWidget 的定制化 widget,并将它用作表单的 ImageField 字段。这样就可以在表单中预览上传的图像。
以上是 ImageField - Django 表单 的介绍。通过使用 ImageField,你可以轻松地添加和保存图像文件并进行预览。