Как сохранить увеличенное изображение в 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.

Вернуться на верх