如何保存多个到多个领域?

时间:2012-11-05 14:22:07

标签: python django django-models django-admin

我想计算标签。我有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()

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

此外,我想在编辑帖子时不应再次增加标签数量。

2 个答案:

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