2015-10-02 4 views
1

У меня есть публикации со списком отсканированных страниц и слов на нем. Взаимоотношения таковы:Django: Фильтровать по нескольким отношениям

# models.py 
class Publication(models.Model): 
    pass 

class Page(models.Model): 
    publication = models.ForeignKey('Publication') 

class Link(models.Model): 
    page = models.ForeignKey('Page') 

class Word(models.Model): 
    link = models.ForeignKey('Link') 

Теперь у меня есть идентификатор одного слова. Как получить каждую публикацию, содержащую это слово? Кроме того, когда вы даете один идентификатор публикации, как мне получить список всех слов в нем?

ответ

0

С этой конфигурации Word может иметь только один Publication поэтому ниже набор запросов даст вам один Publication независимо от того, что, как ваши модели связаны с ForeignKey снизу вверх вместо ManyToManyField:

Publication.objects.filter(page_set__link__set__word__id=word_id) 

подобным образом, это даст вам ту же публикацию в виде одного объекта:

Word.objects.get(pk=word_id).link.page.publication 

Если вы хотите, чтобы все слова в публикации:

Word.objects.filter(link__page__publication__id=publication_id) 
Смежные вопросы