如何根据 M2M 关系在 django 模型中自动填充 IntegerField?

Posted

技术标签:

【中文标题】如何根据 M2M 关系在 django 模型中自动填充 IntegerField?【英文标题】:how to auto fill an IntegerField in django model based on a M2M relation? 【发布时间】:2021-12-01 17:03:10 【问题描述】:

我有一个名为 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查询集中的对象数量自动填充likes_count字段,如下所示:

like_count = obj.likes.count()

我该怎么做?

【问题讨论】:

【参考方案1】:

您可以在此处使用 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()

更新:django 模型中的 m2m 字段在记录保存到 db 后更新。所以可以使用 post_save 信号。

【讨论】:

以上是关于如何根据 M2M 关系在 django 模型中自动填充 IntegerField?的主要内容,如果未能解决你的问题,请参考以下文章

Django多对多(m2m)与同一模型的关系

Unhashable 类型:尝试在 Django 中使用 post_save 动态添加 m2m 关系时出现“列表”错误

在 Django 中过滤第二级多对多关系

django m2m 模型不同步

忽略 django 的 post_save 信号中对 m2m 关系的更改

如何在 Django ORM 中为 M2M 关系表创建 UniqueConstraint?