Могу ли я использовать значения файлов django в функциях def?

#django #image-resizing

#django #изменение размера изображения

Вопрос:

Я пытаюсь создать функцию для изменения размера изображений перед загрузкой. Я нашел кое-что в интернете, и это работает, но я хочу это улучшить. Вместо того, чтобы иметь output_size = (320, 560) [всегда в качестве значения по умолчанию] Я хотел бы иметь некоторые поля django и изменять их каждый раз, когда мне нужно от администратора django. Вот почему я добавил поля image_height и image_width .

На мой взгляд, это было решением output_size = (image_height, image_width), но это не работает

 output_size = (image_height, image_width)
NameError: name 'image_height' is not defined
  

Как я могу использовать поля image_height и image_width и использовать добавление значений в output_size

Мой models.py

 from __future__ import unicode_literals
from django.db import models
from django.urls import reverse

from PIL import Image

def upload_location(instance, filename):
    return "%s/%s" %('image/service', filename)
# Create your models here.
class Services(models.Model):
    title  = models.CharField(max_length=120)
    content  = models.TextField(null=True, blank=True)
    image = models.ImageField(upload_to=upload_location, blank=True, null=True)
    image_height = models.PositiveIntegerField(default=320)
    image_width = models.PositiveIntegerField(default=560)
    
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        img = Image.open(self.image.path)

        if img.height > 320 or img.weight > 560:
            output_size = (image_height, image_width)
            img.thumbnail(output_size)
            img.save(self.image.path)

    def __unicode__(self):
        return self.title

    def __str__(self):
        return self.title
  

Ответ №1:

Использовать self

 class Services(models.Model):
    # rest of your code
    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)
        img = Image.open(self.image.path)

        if img.height > 320 or img.weight > 560:

            output_size = (self.image_height, self.image_width)

            img.thumbnail(output_size)
            img.save(self.image.path)