1. ПОЛУЧЕНИЕ ИМЕНИ ЗАГРУЖЕННОГО ИЗОБРАЖЕНИЯ С ИСПОЛЬЗОВАНИЕМ ImageField:
Я использую ImageField для хранения изображения, полученного из почтового запроса по определенному пути. он возвращает путь к изображению вместо имени изображения
Это моя модель: image_ref - глобальная переменная
class IMGResize(models.Model):
image = models.ImageField(upload_to='ImgResize', blank=True)
class Meta:
db_table = 'imgresize'
def __str__(self):
return self.image
def save(self,force_insert=False, force_update=False, using=None):
if not self.image:
return
super(IMGResize, self).save()
global image_ref
image_ref = self.image
super(IMGResize, self).save()
Здесь генерируется имя по умолчанию для изображения, как я могу получить имя изображения?
2. как автоматически сгенерировать имя для изображения с измененным размером:
Здесь, в моей предыдущей модели, я получаю какое-то изображение, которое пытаюсь изменить размер и сохранить по другому пути, используя другую модель в том же файле models.py.
Это моя модель:
from .resize_code import image_resize
class Profile(models.Model):
image = models.ForeignKey(IMGResize, related_name='profiles', on_delete=models.CASCADE)
name=models.CharField(max_length=10)
image_width=models.PositiveIntegerField(null=True, blank=False)
image_height=models.PositiveIntegerField(null=True, blank=False)
class Meta:
db_table = 'profiles'
unique_together=('name','image')
def __str__(self):
return self.name
def save(self,force_insert=False, force_update=False, using=None):
global image_ref
super(Profile, self).save()
image_resize(self,image_ref)
super(Profile, self).save()
вот мой файл resize_code.py:
def image_resize(self,image,force_insert=False, force_update=False, using=None):
if not image:
return
img = Image.open(os.path.abspath(str(image)), 'r')
img = resize_contain(img, [self.image_width, self.image_height])
path='resized_images/contain.jpeg'
img.save(path, img.format)
Здесь, в resize_code.py, я жестко кодирую имя изображения с измененным размером, а не генерирую его каждый раз (путь = 'resized_images / Содержит.jpeg')
Вот мой файл serializer.py:
class profilesSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('name','image_width','image_height',)
class IMGResizeSerializer(serializers.ModelSerializer):
profiles = profilesSerializer(many=True,read_only=False)
image = Base64ImageField()
class Meta:
model = IMGResize
fields = ('id','image','profiles',)
def create(self, validated_data):
profiles_data = validated_data.pop('profiles')
image = IMGResize.objects.create(**validated_data)
for profile_data in profiles_data:
Profile.objects.create(image=image, **profile_data)
return image
Спасибо