通过django

时间:2017-12-20 23:59:34

标签: python django many-to-many

我正在学习Django并且已经完成了各种教程。我创建了一个基本的博客网站,但想添加标记功能。它有效 - 我有分配标签的帖子,但我现在很难在帖子中列出这些标签。

博客/ models.py:

class Post(models.Model):
    title = models.CharField(max_length=50)
    text = models.CharField(max_length=1000)
    pub_date = models.DateTimeField('date published')
    author = models.CharField(max_length=30)
    mail = models.EmailField()

class Tag(models.Model):
    name = models.CharField(max_length=15)
    posts = models.ManyToManyField(Post, related_name="tags")

我知道我需要这样的东西: Tag.objects.filter() 但是,请你指导我如何仅列出与特定帖子相关的内容?我正在尝试各种组合,但没有一个能够很好地工作......

2 个答案:

答案 0 :(得分:1)

没有办法实现这一目标。

获取标记,查找发生的所有帖子。

try:
    tag = Tag.objects.get(name="#blawBlaw")
    posts_of_that_tag = tag.posts.all()
except Tag.DoesNotExist:
    pass

其他方式:     获取帖子并找到它的标签

try:
    p = Post.Objects.get(id=1)
    tags = p.tag_set.all();
except Post.DoesNotExist:
    pass

答案 1 :(得分:0)

这就是我解决我的问题的方式。与@Sagar略有不同 我想获取与我的博客文章相关的标签。

我使用复数形式的标签,而不是使用tags_set。

# object containing title, body etc
post = Post.objects.get(slug=slug)

# get all the tags
p = Post.objects.get(id=post.id)
tags = p.tags.all()