如何在Django模型中查找对象具有ManyToMany关系

时间:2015-10-20 10:37:59

标签: django

我发布了同样的问题。但我无法获得我想知道的东西。所以,我再次发帖。

class Blog(models.Model):
    title = model.CharField(max_length=100)
    text = TextField()
    tags = ManyToManyField(‘Tag’,blank=True)
    …

class Tag(models.Model):
    tag = models.ChatField(max_length=50, unique=True)
    …

我试图找到一种简单的方法来查找具有相同标签的博客。 例如,某个博客的标签为“1”,“2”,“3”。我想找一些至少有一个标签的博客。 有这样的对象:

Blog A Object has tag [“1”, ”2”, ”3”]
Blog B Object has tag [“1”, “3”]
Blog C Object has tag [“2”, “3”]
Blog D Object has tag [“1”, “2”]
Blog E Object has tag [“3”, ”4”, ”5”]
Blog F Object has tag [“6”, ”7”, ”8”]

在这种情况下。我想找到Blogs至少有一个Blog A的标签[“1”,“2”,“3”]

所以结果必须是[A,B,C,D,E]

我认为,下面不是解决方案。

blogs = Blog.objects.filter(tags__tag='1').filter(tags__tag='2').filter(tags_tag='f3')

或者

blogs = Blog.object.filter(tags__tag='1')
blogs = blogs.filter(tags__tag='2')
blogs = blogs.filter(tags__tag='3')

因为它可能会将[博客A]作为结果。

2 个答案:

答案 0 :(得分:5)

试试这个:

@Security

答案 1 :(得分:1)

假设您的博客标题为“a”,并且您希望找到类似于博客'a'的博客

b = Blog.objects.get(title='a')
b_tags = b.tags.all()
similar_blogs = Blog.objects.filter(tags__in=b_tags)