Я пытаюсь обновить свой внешний ключ, когда изображение добавляется в базу данных, просто чтобы пометить изображение, если высота больше, чем ширина, и наоборот. Для этого я пытаюсь переопределить метод сохранения, но не знаю, как это сделать точно.
модели:
from PIL import Image
class PhotoDimensionsCategory(models.Model):
photo_dim_category = models.CharField(max_length=250)
class ImageInGallery(models.Model):
image = models.ImageField(upload_to='photos/')
gallery_dim = models.ForeignKey(PhotoDimensionsCategory, on_delete=models.CASCADE)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
img = Image.open(self.image.path)
on_height = PhotoDimensionsCategory.objects.get(photo_dim_category='on_height')
on_width = PhotoDimensionsCategory.objects.get(photo_dim_category='on_width')
is_new = not self.pk
if img.height > img.width and is_new:
# set the gallery_dim to on_height
else
# set the gallery_dim to on_width
Я пробовал несколько вещей, но все закончилось ошибками. Любые идеи. Спасибо.
ИЗМЕНИТЬ:
Если я попытаюсь использовать сигналы, он ничего не сделает:
@receiver(post_save, sender=ImageInGallery)
def set_dim(sender, instance, created, **kwardgs):
if created:
instance.gallery_dim.photo_dim_category = 'on_height'
instance.save()