wagtail.core.models
This document contains reference information for the model classes inside the wagtailcore
module.
title
(text)
Human-readable title of the page.
draft_title
(text)
Human-readable title of the page, incorporating any changes that have been made in a draft edit (in contrast to the title
field, which for published pages will be the title as it exists in the current published version).
slug
(text)
This is used for constructing the page's URL.
For example: http://domain.com/blog/[my-slug]/
content_type
(foreign key to django.contrib.contenttypes.models.ContentType
)
A foreign key to the ~django.contrib.contenttypes.models.ContentType
object that represents the specific model of this page.
live
(boolean)
A boolean that is set to True
if the page is published.
Note: this field defaults to True
meaning that any pages that are created programmatically will be published by default.
has_unpublished_changes
(boolean)
A boolean that is set to True
when the page is either in draft or published with draft changes.
owner
(foreign key to user model)
A foreign key to the user that created the page.
first_published_at
(date/time)
The date/time when the page was first published.
last_published_at
(date/time)
The date/time when the page was last published.
seo_title
(text)
Alternate SEO-crafted title, for use in the page's <title>
HTML tag.
search_description
(text)
SEO-crafted description of the content, used for search indexing. This is also suitable for the page's <meta name="description">
HTML tag.
show_in_menus
(boolean)
Toggles whether the page should be included in site-wide menus.
This is used by the ~wagtail.core.query.PageQuerySet.in_menu
QuerySet filter.
Defaults to False
and can be overridden on the model with show_in_menus_default = True
.
Note
To set the global default for all pages, set Page.show_in_menus_default = True
once where you first import the Page
model.
In addition to the model fields provided, Page
has many properties and methods that you may wish to reference, use, or override in creating your own models.
Note
See also django-treebeard's node API. Page
is a subclass of materialized path tree nodes.
specific
specific_class
get_url
full_url
relative_url
get_site
get_url_parts
route
serve
get_context
get_template
get_admin_display_title
preview_modes
serve_preview
get_parent
get_ancestors
get_descendants
get_siblings
search_fields
A list of fields to be indexed by the search engine. See Search docs wagtailsearch_indexing_fields
subpage_types
A whitelist of page models which can be created as children of this page type. For example, a BlogIndex
page might allow a BlogPage
as a child, but not a JobPage
:
class BlogIndex(Page):
subpage_types = ['mysite.BlogPage', 'mysite.BlogArchivePage']
The creation of child pages can be blocked altogether for a given page by setting it's subpage_types attribute to an empty array:
class BlogPage(Page):
subpage_types = []
parent_page_types
A whitelist of page models which are allowed as parent page types. For example, a BlogPage
may only allow itself to be created below the BlogIndex
page:
class BlogPage(Page):
parent_page_types = ['mysite.BlogIndexPage']
Pages can block themselves from being created at all by setting parent_page_types to an empty array (this is useful for creating unique pages that should only be created once):
class HiddenPage(Page):
parent_page_types = []
can_exist_under
can_create_at
can_move_to
password_required_template
Defines which template file should be used to render the login form for Protected pages using this model. This overrides the default, defined using PASSWORD_REQUIRED_TEMPLATE
in your settings. See private_pages
is_creatable
Controls if this page can be created through the Wagtail administration. Defaults to True
, and is not inherited by subclasses. This is useful when using multi-table inheritance <django:multi-table-inheritance>
, to stop the base model from being created as an actual page.
max_count
Controls the maximum number of pages of this type that can be created through the Wagtail administration interface. This is useful when needing "allow at most 3 of these pages to exist", or for singleton pages.
exclude_fields_in_copy
An array of field names that will not be included when a Page is copied. Useful when you have relations that do not use ClusterableModel or should not be copied.
class BlogPage(Page):
exclude_fields_in_copy = ['special_relation', 'custom_uuid']
The following fields will always be excluded in a copy - ['id', 'path', 'depth', 'numchild', 'url_path', 'path'].
base_form_class
The form class used as a base for editing Pages of this type in the Wagtail page editor. This attribute can be set on a model to customise the Page editor form. Forms must be a subclass of ~wagtail.admin.forms.WagtailAdminPageForm
. See custom_edit_handler_forms
for more information.
The Site
model is useful for multi-site installations as it allows an administrator to configure which part of the tree to use for each hostname that the server responds on.
This configuration is used by the ~wagtail.core.middleware.SiteMiddleware
middleware class which checks each request against this configuration and appends the Site object to the Django request object.
hostname
(text)
This is the hostname of the site, excluding the scheme, port and path.
For example: www.mysite.com
Note
If you're looking for how to get the root url of a site, use the ~Site.root_url
attribute.
port
(number)
This is the port number that the site responds on.
site_name
(text - optional)
A human-readable name for the site. This is not used by Wagtail itself, but is suitable for use on the site front-end, such as in <title>
elements.
For example: Rod's World of Birds
root_page
(foreign key to ~wagtail.core.models.Page
)
This is a link to the root page of the site. This page will be what appears at the /
URL on the site and would usually be a homepage.
is_default_site
(boolean)
This is set to True
if the site is the default. Only one site can be the default.
The default site is used as a fallback in situations where a site with the required hostname/port couldn't be found.
find_for_request
root_url
This returns the URL of the site. It is calculated from the ~Site.hostname
and the ~Site.port
fields.
The scheme part of the URL is calculated based on value of the ~Site.port
field:
- 80 =
http://
- 443 =
https://
- Everything else will use the
http://
scheme and the port will be appended to the end of the hostname (eg.http://mysite.com:8000/
)
get_site_root_paths
Every time a page is edited a new PageRevision
is created and saved to the database. It can be used to find the full history of all changes that have been made to a page and it also provides a place for new changes to be kept before going live.
- Revisions can be created from any
~wagtail.core.models.Page
object by calling its~Page.save_revision
method- The content of the page is JSON-serialised and stored in the
~PageRevision.content_json
field- You can retrieve a
PageRevision
as a~wagtail.core.models.Page
object by calling the~PageRevision.as_page_object
method
page
(foreign key to ~wagtail.core.models.Page
)
submitted_for_moderation
(boolean)
True
if this revision is in moderation
created_at
(date/time)
This is the time the revision was created
user
(foreign key to user model)
This links to the user that created the revision
content_json
(text)
This field contains the JSON content for the page at the time the revision was created
objects
This manager is used to retrieve all of the PageRevision
objects in the database
Example:
PageRevision.objects.all()
submitted_revisions
This manager is used to retrieve all of the PageRevision
objects that are awaiting moderator approval
Example:
PageRevision.submitted_revisions.all()
as_page_object
This method retrieves this revision as an instance of its ~wagtail.core.models.Page
subclass.
approve_moderation
Calling this on a revision that's in moderation will mark it as approved and publish it
reject_moderation
Calling this on a revision that's in moderation will mark it as rejected
is_latest_revision
Returns True
if this revision is its page's latest revision
publish
Calling this will copy the content of this revision into the live page object. If the page is in draft, it will be published.
group
(foreign key to django.contrib.auth.models.Group
)
page
(foreign key to ~wagtail.core.models.Page
)
permission_type
(choice list)
page
(foreign key to ~wagtail.core.models.Page
)
password
(text)
sort_order
(number)