Skip to content

Latest commit

 

History

History
253 lines (140 loc) · 5.83 KB

queryset_reference.rst

File metadata and controls

253 lines (140 loc) · 5.83 KB

Page QuerySet reference

All models that inherit from ~wagtail.wagtailcore.models.Page are given some extra QuerySet methods accessible from their .objects attribute.

Examples

  • Selecting only live pages

    live_pages = Page.objects.live()
  • Selecting published EventPages that are descendants of events_index

    events = EventPage.objects.live().descendant_of(events_index)
  • Getting a list of menu items

    # This gets a QuerySet of live children of the homepage with ``show_in_menus`` set
    menu_items = homepage.get_children().live().in_menu()

Reference

wagtail.wagtailcore.query

PageQuerySet

live

Example:

published_pages = Page.objects.live()

not_live

Example:

unpublished_pages = Page.objects.not_live()

in_menu

Example:

# Build a menu from live pages that are children of the homepage
menu_items = homepage.get_children().live().in_menu()

Note

To put your page in menus, set the show_in_menus flag to true:

# Add 'my_page' to the menu
my_page.show_in_menus = True

not_in_menu

in_site

Example:

# Get all the EventPages in the current site
site_events = EventPage.objects.in_site(request.site)

page

Example:

# Append an extra page to a QuerySet
new_queryset = old_queryset | Page.objects.page(page_to_add)

not_page

Example:

# Remove a page from a QuerySet
new_queryset = old_queryset & Page.objects.not_page(page_to_remove)

descendant_of

Example:

# Get EventPages that are under the special_events Page
special_events = EventPage.objects.descendant_of(special_events_index)

# Alternative way
special_events = special_events_index.get_descendants()

not_descendant_of

Example:

# Get EventPages that are not under the archived_events Page
non_archived_events = EventPage.objects.not_descendant_of(archived_events_index)

child_of

Example:

# Get a list of sections
sections = Page.objects.child_of(homepage)

# Alternative way
sections = homepage.get_children()

not_child_of

ancestor_of

Example:

# Get the current section
current_section = Page.objects.ancestor_of(current_page).child_of(homepage).first()

# Alternative way
current_section = current_page.get_ancestors().child_of(homepage).first()

not_ancestor_of

Example:

# Get the other sections
other_sections = Page.objects.not_ancestor_of(current_page).child_of(homepage)

parent_of

not_parent_of

sibling_of

Example:

# Get list of siblings
siblings = Page.objects.sibling_of(current_page)

# Alternative way
siblings = current_page.get_siblings()

not_sibling_of

public

See: private_pages

Note

This doesn't filter out unpublished pages. If you want to only have published public pages, use .live().public()

Example:

# Find all the pages that are viewable by the public
all_pages = Page.objects.live().public()

not_public

search

See: wagtailsearch_searching_pages

Example:

# Search future events
results = EventPage.objects.live().filter(date__gt=timezone.now()).search("Hello")

type

Example:

# Find all pages that are of type AbstractEmailForm, or a descendant of it
form_pages = Page.objects.type(AbstractEmailForm)

not_type

exact_type

Example:

# Find all pages that are of the exact type EventPage
event_pages = Page.objects.exact_type(EventPage)

not_exact_type

Example:

# Find all pages that are not of the exact type EventPage (but may be a subclass)
non_event_pages = Page.objects.not_exact_type(EventPage)

unpublish

Example:

# Unpublish current_page and all of its children
Page.objects.descendant_of(current_page, inclusive=True).unpublish()

specific

Example:

# Get the specific instance of all children of the hompage,
# in a minimum number of database queries.
homepage.get_children().specific()

See also: :pyPage.specific <wagtail.wagtailcore.models.Page.specific>

first_common_ancestor