Есть такие модели:
class Post(models.Model):
class Meta:
verbose_name = 'Статья'
verbose_name_plural = 'Список статей'
ordering = ['-timestamp']
title = models.CharField(max_length=120, verbose_name='Заголовок')
body = models.TextField(verbose_name='Текст')
anounce = models.TextField(verbose_name='Анонс')
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True, verbose_name='Дата создания')
author = models.ForeignKey(User, verbose_name='Автор', related_name='posts')
approve = models.BooleanField(default=False)
preview = models.ImageField(upload_to="preview/%Y/%m/%d", blank=True)
likers = models.ManyToManyField(User, verbose_name='Добавившие в избранное', related_name='favorites', blank=True, default=None)
category = models.ForeignKey(Category, verbose_name='Категория', related_name='posts', null=True)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
super(Post, self).save(*args, **kwargs)
if self.photos.all().count() > 0:
self.preview = self.photos.all().first().image
resize_thumbnail(self.preview)
super(Post, self).save(*args, **kwargs)
class Photo(models.Model):
post = models.ForeignKey(Post, related_name='photos')
image = models.ImageField(upload_to="%Y/%m/%d")
def save(self, *args, **kwargs):
super(Photo, self).save(*args, **kwargs)
if self.image:
resize_image(self.image)
Логика в методах save должна быть такая: После соранения всех изображений в модели Photo, обновляется поле preview модели пост, кропается и сохраняется в бд. Но проблема в том, что preview обновляется на второе сохранение, тоесть, сохраняю модель первый раз, ничего не происходит(с полем preview), сохраняю модель Post второй раз, и поле обновляется.
Ещё пробовал делать через сигнал, вот так:
@receiver(signals.post_save, sender=Post, dispatch_uid="set_preview")
def set_preview(sender, instance, **kwargs):
if instance.photos.all().count() > 0:
instance.preview = instance.photos.all().first().image
resize_thumbnail(instance.preview)
instance.preview.save()
Но получаю ошибку:
save() missing 2 required positional arguments: 'name' and 'content'
Буду благодарен, если поможете исправить логику.