Как передать высоту и ширину изображения в атрибуты класса models.ImageField в Django?

Конструктивный подход к изучению Django — это важный шаг. В вашем случае, вы работаете с классом, отвечающим за изменение размера и конвертацию изображения. Вы хотите узнать, как передать высоту и ширину изображения в модель. Возможно, подскажете, как это сделать, учитывая возможность использования этого класса в других проектах с разными значениями?
  • 22 августа 2024 г. 11:54
Ответы на вопрос 2
Для передачи высоты и ширины изображения в атрибуты класса models.ImageField в Django, вы можете использовать параметры `height_field` и `width_field`. 

Например, если у вас есть модель, которая содержит поле для изображения, вы можете задать два дополнительных поля для хранения высоты и ширины изображения:

```python
from django.db import models

class MyModel(models.Model):
    image = models.ImageField(upload_to='images/')
    height = models.IntegerField(default=0)
    width = models.IntegerField(default=0)
```

Затем, вы можете использовать параметры `height_field` и `width_field` в поле `image`, чтобы указать, в какие поля сохранять высоту и ширину изображения:

```python
class MyModel(models.Model):
    image = models.ImageField(upload_to='images/', height_field='height', width_field='width')
    height = models.IntegerField(default=0)
    width = models.IntegerField(default=0)
```

Теперь, при загрузке изображения в поле `image`, Django автоматически сохранит его высоту и ширину в соответствующие поля `height` и `width` модели. 

Этот подход позволяет легко использовать этот класс в других проектах, просто изменяя названия полей `height` и `width` при необходимости.
Если вы хотите использовать класс в других проектах то первое, это не надо жестко кодировать max_width и max_height 
def save(self, name, content, save=True, max_width=200, max_height=200)
Передайте через поле модели и сохраните.

class WEBPThumbnail(models.ImageField):
    def __init__(self, *args, **kwargs):
        self.max_width = kwargs.pop('max_width', 200)
        self.max_height = kwargs.pop('max_height', 200)
        super().__init__(*args, **kwargs)

    def attr_class(self):
        return WEBPThumbnailImg

    def pre_save(self, model_instance, add):
        file = super().pre_save(model_instance, add)
        if file and not file._committed:
            file.max_width = self.max_width
            file.max_height = self.max_height
        return file


Теперь вы можете использовать эти параметры в class WEBPThumbnailImg(ImageFieldFile) если ваши условия True то сохраняете изображения с новыми парметрами.

Используйте в вашей модели.
class Category(models.Model)
Похожие вопросы