如何在Django中保存一个调整大小的图像?



我试着保存两个,一个是原始的,一个是调整大小的图像,我不明白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.ModelFormPostForm使用save()方法,然后分别为每个字段保存cleaned_data(),thumbnailthumbnail_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()方法将运行。

最新更新