Django搜索带有标签的模型的查询

brs*_*gic 1 django django-models django-queryset

我有如下模型,我想IndexedLibrary根据其book名称和tag名称选择对象book.

我该如何构建此查询?下面的查询执行时不包括书的标签,但我也想加入他们

IndexLibrary.objects.filter(book__name__icontains=KEYWORD)


class IndexedLibrary(models.Model):
    name = models.CharField(max_length=1000)
    book = models.ForeignKey(Book,null=False,blank=False)    

    def __unicode__(self):
        return self.name

class Book(models.Model):
    name = models.CharField(max_length=1000)

    def __unicode__(self):
        return self.name

class BookTag(models.Model):
    name = models.CharField(max_length=1000)
    book = models.ForeignKey(Book,null=False,blank=False)    
    def __unicode__(self):
        return self.name
Run Code Online (Sandbox Code Playgroud)

Mat*_*son 7

我会添加tagsManyToManyField(Tag, blank=True),删除book属性BookTag,然后查询

IndexLibrary.objects.filter(book__name__icontains=KEYWORD, \
    tags__name__in=['Tage Name 1', 'Tag Name 2'])
Run Code Online (Sandbox Code Playgroud)

特别是因为标签通常在多个对象之间共享.