Использование значения атрибута из IntegerField в другом атрибуте объекта - PullRequest
0 голосов
/ 04 мая 2020

Итак, я пытаюсь выучить django, и я пытаюсь включить изменение размера изображения из загруженного изображения, которое затем назначается объекту через администратора. Я использую django -stdimage lib.

По идее можно вызвать следующий пример:

class Website_Post(models.Model):
    title                   = models.TextField(default='Enter title')
    intro                   = models.TextField(default='Enter post')
    image_width             = models.IntegerField(validators=[MaxValueValidator(1000), MinValueValidator(0)], default=300)
    image_height            = models.IntegerField(validators=[MaxValueValidator(1000), MinValueValidator(0)], default=300)
    cover = StdImageField(upload_to='images/', 
                  variations={'full': {'width': image_width, 'height': image_height}},null=True)

    def __str__(self):
        return self.title

А затем в / admin можно определить пропорции изображения с помощью максимальное значение и минимальное значение, которое затем применяется к выбранному изображению.

Я считаю, что варианты StdImageField не легко доступны после создания объекта, поэтому их можно корректировать, по крайней мере, из бэкэнда.

Однако при выполнении этого кода объект не может быть создан, так как выдается следующая ошибка:

TypeError: '>' not supported between instances of 'int' and 'IntegerField'

с ошибкой на этом этапе:

@staticmethod
    def is_smaller(img, variation):
        return img.size[0] > variation['width'] \ # <--- error in this line
            or img.size[1] > variation['height']

, что для меня означает, что значение IntegerField не отображается как целое число при использовании в коде.

Итак, мой вопрос: почему это так, и есть ли способ решить эту проблему? Лично я считаю, что способ, которым я подошел к этому, в корне неверен, но я хотел бы знать, где ограничения.

1 Ответ

0 голосов
/ 04 мая 2020

Ошибка: img.size[0] - целочисленное значение, тогда как variation['width'] - целочисленное поле. Итак, вам нужно преобразовать поле Integer в int, например:

@staticmethod
    def is_smaller(img, variation):
        width = int(variation['width'])
        height = int(variation['height'])
        return img.size[0] >  width or img.size[1] > height
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...