0

タグを数えたい。Post モデルとタグ モデルがあり、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 に答える