Django поисковый запрос для моделей с тегами - PullRequest
1 голос
/ 06 октября 2011

У меня есть модели, как показано ниже, и я хотел бы выбрать 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

1 Ответ

7 голосов
/ 06 октября 2011

Я бы добавил tags как ManyToManyField(Tag, blank=True), удалил свойство book из BookTag, а затем запросил как

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

Тем более что теги часто используются несколькими объектами.

...