如何根据 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?的主要内容,如果未能解决你的问题,请参考以下文章
Unhashable 类型:尝试在 Django 中使用 post_save 动态添加 m2m 关系时出现“列表”错误