Как автоматически заполнить 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.

Вернуться на верх