我想计算标签。我有Post模型和标签模型和post模型有很多totoy字段到标签。当我想添加新帖子同时我为帖子添加标签时,它必须增加标签计数。
我的帖子和标签模型:
class Post(models.Model):
tags = models.ManyToManyField(Tag,blank=True,null=True,verbose_name=_('tags'))
def save(self)
super(Post, self).save()
for i in self.tags.all():
i.save()
class Tag(models.Model):
name=models.CharField(max_length=30,verbose_name=_('name'))
count = models.IntegerField(blank=True,null=True,default=0)
slug = models.SlugField(blank=True,null=True)
def save(self):
self.slug = slugify(self.name.upper())
self.count = Post.objects.filter(tags__name=self.name).count()
super(Tag, self).save()
当我添加新帖子时,我查找标签模型并看到计数编号没有改变,但是当我按下标签管理中的保存按钮时,我看到真正的计数。但是当我在不按标签中的保存按钮的情况下查找标签管理员时,我希望看到实际计数。
此外,我想在编辑帖子时不应再次增加标签数量。
答案 0 :(得分:0)
我会使用m2m_changed signal来解决这个问题。
答案 1 :(得分:0)
您可以执行以下操作:
class Post(models.Model):
tags = models.ManyToManyField(Tag,blank=True,null=True,verbose_name=_('tags'))
def save(self)
super(Post, self).save()
for tag in self.tags :
tag.count = tag.post_set.count()
tag.save()
OR,而不是将计数值保存到字段中,只需在需要时进行查找:
tag.post_set.count()
您可以向Tag
添加一个功能,以便轻松实现:
def count(self) :
return self.post_set.count()