0

我要数标签。我有帖子模型和标签模型,并且帖子模型有很多标签字段。当我想添加新帖子的同时我为 post 添加标签时,它必须增加标签计数。

我的帖子和标签模型:

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()

当我添加新帖子时,我查看标签模型并看到计数没有改变,但是当我按下标签管理中的保存按钮时,我看到了实际计数。但是,当我在不按标签中的保存按钮的情况下查找标签管理员时,我想查看实际计数。

我也希望当我编辑帖子时它不应该再次增加标签数量。

4

2 回答 2

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()

或者,不是将计数值保存到字段中,而是在需要时进行查找:

tag.post_set.count()

您可以添加一个函数来Tag轻松完成此操作:

def count(self) :
    return self.post_set.count()
于 2012-11-05T16:11:13.900 回答
0

我会使用m2m_changed 信号来解决这个问题。

于 2012-11-05T15:24:42.230 回答