Как сохранить увеличенное изображение в 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/')
?
Вы можете использовать метод save()
для PostForm
, который наследуется от forms.ModelForm
, а затем сохранить 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
Этот метод save()
будет запущен, когда is_valid()
будет True
.