Как автоматически заполнить IntegerField в модели django на основе M2M отношения?
У меня есть модель с именем Post, и эта модель имеет отношение многие ко многим с другой моделью с именем LikeIps.
class Post(models.Model):
title = models.CharField(max_length=250)
summary = models.TextField()
content = RichTextField()
likes = models.ManyToManyField(LikeIP, related_name="liked_posts", blank=True)
like_count = models.IntegerField(editable=False)
def __str__(self):
return self.title
Я хочу автоматически заполнять поле likes_count
на основе количества объектов в запросе likes
, заданном следующим образом:
like_count = obj.likes.count()
как я должен это сделать?
Вы можете использовать документацию по сигналам Django здесь Django Post-save signal. Он будет вызван после сохранения объекта в db, чтобы вы могли внести изменения в экземпляр.
@receiver(post_save, sender=Post)
def save_post(sender, instance, created, **kwargs):
# or some other checks/logic
if created:
instance.like_count = obj.likes.count()
instance.save()
Update: поле m2m в модели django обновляется после сохранения записи в базе данных. Поэтому можно использовать сигнал post_save.