Как отфильтровать записи по тэгам, используя django-taggit в django 2.2 - PullRequest
0 голосов
/ 09 мая 2019

В настоящее время я все еще учусь с Django и создаю свой блог, используя Django 2.2. но почему-то есть ошибка при использовании django-taggit.

Как отфильтровать пост по тегам?

Я прочитал документацию, но не до конца рассмотрено, как реализовать это в реальном проекте.

Вот мой код:

Я пробовал несколько разных способов, которые я все еще ищу в StackOverflow, но до сих пор не получил ответа.

Результаты /blog/tag/post-tagged совпадают с /blog. Так как мне отфильтровать его от views.py? или возможно от blog.html?.

Таким образом, результат /blog/tag/post-tagged только из отмеченного сообщения.

вот мой код:

models.py:

...

from taggit.managers import TaggableManager



"Post Model"
class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    slug = models.SlugField(max_length=100, null=True, blank=True, unique=True)
    title = models.CharField(max_length=200)

    tags = TaggableManager(blank=True)
...

views.py

def blogIndex(request):
    posts = Post.objects.all().order_by("-created_date")[0:4]
    context = {"posts": posts,}
    return render(request, 'blog.html',  context)



def Tagging(request, slug):

    tags = Tag.objects.filter(slug=slug)
    posts = Post.objects.all().order_by("-tags")

    context = {
        'tags': tags,
        'posts': posts,
    }
    return render(request, 'blog.html', context)

urls.py

path("tag/<slug:slug>/", views.Tagging, name='tagged'),

my blog.html:

<div id="tags-middle">
   <div class="tags-cloud">
      Tags :
      {% for tag in post.tags.all %}
         <a href="{% url 'tagged' tag.slug %}">{{ tag.name }}</a>
      {% endfor %}
    </div>
</div>

1 Ответ

0 голосов
/ 10 мая 2019

Я решил эту проблему, отфильтровав теги из views.py.

, поскольку в моих сообщениях есть несколько тегов.поэтому __in и tags должны быть в списке .

Вот мои views.py:

tags = Tag.objects.filter(slug=slug).values_list('name', flat=True)
posts = Post.objects.filter(tags__name__in=tags)

В основном, как документация сказал, что мы можем фильтровать, используя строку, например:

posts = Post.objects.filter(tags__name__in=["Lorem"])

Но это займет только одну строку.

, если я попытаюсь использовать несколько строк, таких как ["Lorem", "Ipsum"], он покажетмне только пустую страницу на /blog/tag/lorem.

...