【问题标题】:filter blogs by tags in Django在 Django 中按标签过滤博客
【发布时间】:2020-06-19 20:54:24
【问题描述】:

我想在 Django 中使用具有特定标签的对象呈现视图。

这是我的模型:

class Tag(models.Model):
    """Model representing a tag."""
    name = models.CharField(max_length=200)

class Post(models.Model):
    """Model representing a post."""
    title = models.CharField(max_length=200)
    # ManyToManyField used because tag can contain many posts. Posts can cover many tags.
    tag = models.ManyToManyField(Tag, related_name='tags', blank=True, default='', help_text='Select a tag for this post')

运行迁移后, 我看到我的数据库中生成了三个表: blog_tagblog_postblog_post_tag blog_post 表不包含名为 tag 的列,而是此 blog_post_tag 包含所有映射。

我想要实现的是找到所有具有特定标签的帖子。

我尝试使用post_list = Post.objects.filter(tag__in=['AWS']),但是这个抛出

Field 'id' expected a number but got 'AWS'.

任何有关解决此问题的帮助将不胜感激!

【问题讨论】:

    标签: python django django-models django-views django-templates


    【解决方案1】:

    你在这里过滤标签的 primary 键。如果你想过滤name,你可以过滤:

    post_list = Post.objects.filter(<b>tag__name__in=['AWS']</b>)

    由于这里的列表包含 一个 元素,您可以使用以下方法进行过滤:

    post_list = Post.objects.filter(<b>tag__name='AWS'</b>)

    【讨论】:

    • 感谢像我这样的 Django 新手的教育!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2011-09-15
    • 2019-03-29
    • 2019-01-21
    • 2015-12-17
    • 1970-01-01
    相关资源
    最近更新 更多