我试着保存两个,一个是原始的,一个是调整大小的图像,我不明白Django会从中理解哪个字段它将调整图像的大小,然后保存。
Models.py:
from django.db import models
from django_resized import ResizedImageField
class Post(models.Model):
thumbnail = models.ImageField(upload_to ='uploads/posts/large/')
thumbnail_small = ResizedImageField(size=[100, 100], upload_to='uploads/posts/small/')
Forms.py:
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['thumbnail','thumbnail_small']
Html:
<form method = "POST" action = "{% url 'adminpanel' %}" enctype = "multipart/form-data">
{% csrf_token %}
<input type = "file" id = "file" name = "thumbnail" accept = "image/png, image/jpeg">
<button type = "submit" class = "btn" name = "apost">Add Post</button>
</form>
那么,问题是,Django如何理解它必须直接将图像从<input name = "thumbnail">
直接保存到thumbnail = models.ImageField(upload_to ='uploads/posts/large/')
和thumbnail_small = ResizedImageField(size=[100, 100], upload_to='uploads/posts/small/')
?
您可以对继承自forms.ModelForm
的PostForm
使用save()
方法,然后分别为每个字段保存cleaned_data()
,thumbnail
和thumbnail_small
。
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['thumbnail']
def save(self, commit=True):
post = super().save(commit=False)
image = self.cleaned_data['thumbnail']
# Saves the image as is
post.thumbnail = image
# Saves the image resized, because the field does it automatically...
post.thumbnail_small = image
if commit:
post.save()
return post
当is_valid()
为True
时,此save()
方法将运行。