Рубрики
Без рубрики

Джанго: Запрос Imagefield по высоте или ширина

У Django есть встроенный Imagefield – он отлично и делает общение с изображениями очень простым. Тем не менее, вы … с меткой Джанго, Python.

У Джанго встроенный Imagefield – Это здорово и делает общение с изображениями очень простым. Однако из коробки вы не можете запросить базу данных для изображений определенного измерения (ширина или высота). Например, вы не можете найти все большие изображения, которые вы храните.

Решение скрывается на виду в Django Docs Анкет

А Imagefield принимает два аргумента: height_field и width_field Анкет Использовать их довольно просто:

from django.db import models


class Person(models.Model):
    avatar = models.ImageField(
        blank=True,
        null=True,
        height_field="avatar_height",
        width_field="avatar_width",
    )
    avatar_height = models.IntegerField(blank=True, null=True)
    avatar_width = models.IntegerField(blank=True, null=True)

Каждый раз, когда мы сохраняем изображение в Аватар Поле, Django автоматически обновляет avatar_heigh и avatar_width Поля с новыми размерами изображения.

Это означает, что теперь у нас есть запись в базе данных, которую мы можем запросить! Если мы хотим найти все изображения хотя бы с одним большим измерением, мы можем сделать что -то вроде:

from django.db.models import Q


big_dim = 500;
big_images = Person.objects.filter(
    Q(avatar_height__gt=big_dim) | Q(avatar_width__gt=big_dim)
    )

Пара финальных заметок:

  1. Поля обновляются только на «Сохранить», поэтому, если вы добавляете это в существующую модель, вы можете пройти через каждый экземпляр и вызовать save () так что поля заполнены
  2. Нормальное использование Person.avatar.Height загрузил бы все изображение в память, чтобы выяснить, насколько оно велик. Это может быть медленным, если вы используете удаленное хранилище, такое как S3 или Цифровые океанские пространства Анкет Но используя Person.avatar_height пропускает все это. Это может привести к большому увеличению производительности, если вам нужно знать размер ваших изображений, но не нужно работать на самом изображении.

Оригинал: “https://dev.to/monty5811/django-query-imagefield-by-height-or-width-5h9c”