11

django-taggitからすべての(一意の)タグを取得するにはどうすればよいですか?すべてのタグをサイドバーに表示したいのですが。現在、特定の投稿のすべてのタグを取得できますが、ブログ全体ですべての一意のタグを取得する必要があります。

models.pyのコード:

from django.db import models
from taggit.managers import TaggableManager

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    created = models.DateTimeField()
    tags = TaggableManager()
4

3 に答える 3

25

all()データベース内のすべてのタグを取得するために使用できます。

from taggit.models import Tag
tags = Tag.objects.all()

完全なソリューションが必要な場合は、をご覧くださいdjango-taggit-templatetags。さまざまなtaggitAPIをテンプレートに直接公開するために、タグリスト用のものを含むいくつかのテンプレートタグを提供します。

于 2012-10-15T11:03:02.510 に答える
5

djangoの新しいバージョンをサポートする現在メンテナンスされているフォークは次のとおりです: https ://github.com/fizista/django-taggit-templatetags2

django-taggit-templatetagsは数年間維持されていません。

于 2014-09-12T16:16:52.403 に答える
2

これは古い質問ですが、私はDjangoの初心者であり、Ajaxドロップダウンにすべてのタグオプションを入力する方法を探しているときにこの質問を見つけました。私は方法を考え出しdjangorestframework、他の人のためにもっと完全な解決策をここに置きたいと思いました(OPはサイドバーに応答を入力したり、他のことをしたりすることもできます)。

これにより、APIエンドポイントが追加されるtagため、に移動して表示するだけでなく/tag/、Ajaxに適したJSON応答を取得できます(これは、djangorestframeworkインストールして使用していることを前提としています)。

serlializers.py

from taggit.models import Tag
class MyTagSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tag
        fields = ['name', 'slug']

views.py

from taggit.models import Tag
class TagViewSet(viewsets.ModelViewSet):
    """
    Not using taggit_serializer.serializers.TaggitSerializer because that's for listing
    tags for an instance of a model
    """
    queryset = Tag.objects.all().order_by('name')
    serializer_class = MyTagSerializer

urls.py

router.register(r'tag', TagViewSet)

そして、ajaxが必要な場合:

$(document).ready(function(){

   $.ajax({
      url : "/tag/",
      dataType: "json",
      type: 'GET'
    }).done(function(response){
      for (var i in response) {
        tagEntry = response[i];
        $('#tagdropdown').append($('<option>', {
            value: tagEntry.name,
            text: tagEntry.name
        }));
      }
    }).fail(function(response){
      console.log('failed!');
      console.log(response);
    });

});
于 2020-05-16T01:17:36.107 に答える