# 모델 참조
```{eval-rst}
.. module:: wagtail.models
```
이 문서는 `wagtail.models` 모듈 내의 모델 클래스에 대한 참조 정보를 포함합니다.
(page_model_ref)=
## `Page`
### 데이터베이스 필드
```{eval-rst}
.. class:: Page
.. attribute:: title
(텍스트)
페이지의 사람이 읽을 수 있는 제목입니다.
.. attribute:: draft_title
(텍스트)
페이지의 사람이 읽을 수 있는 제목으로, 초안 편집에서 변경된 내용을 포함합니다(게시된 페이지의 경우 ``title`` 필드는 현재 게시된 버전의 제목임).
.. attribute:: slug
(텍스트)
페이지의 URL을 구성하는 데 사용됩니다.
예: ``http://domain.com/blog/[my-slug]/``
.. attribute:: content_type
(``django.contrib.contenttypes.models.ContentType`` 에 대한 외래 키)
이 페이지의 특정 모델을 나타내는 :class:`~django.contrib.contenttypes.models.ContentType` 객체에 대한 외래 키입니다.
.. attribute:: live
(부울)
페이지가 게시된 경우 ``True`` 로 설정되는 부울입니다.
참고: 이 필드는 기본적으로 ``True`` 로 설정되어 프로그래밍 방식으로 생성된 모든 페이지가 기본적으로 게시됩니다.
.. attribute:: has_unpublished_changes
(부울)
페이지가 초안이거나 초안 변경 사항과 함께 게시된 경우 ``True`` 로 설정되는 부울입니다.
.. attribute:: owner
(사용자 모델에 대한 외래 키)
페이지를 만든 사용자에 대한 외래 키입니다.
.. attribute:: first_published_at
(날짜/시간)
페이지가 처음 게시된 날짜/시간입니다.
.. attribute:: last_published_at
(날짜/시간)
페이지가 마지막으로 게시된 날짜/시간입니다.
.. attribute:: seo_title
(텍스트)
페이지의 ``
`` HTML 태그에 사용하기 위한 대체 SEO 최적화 제목입니다.
.. attribute:: search_description
(텍스트)
검색 색인에 사용되는 콘텐츠의 SEO 최적화 설명입니다. 페이지의 ```` HTML 태그에도 적합합니다.
.. attribute:: show_in_menus
(부울)
페이지가 사이트 전체 메뉴에 포함되어야 하는지 여부를 전환하며, 페이지 편집기의 ``promote_panels`` 에 표시됩니다.
Wagtail은 기본적으로 메뉴 구현을 포함하지 않으므로, 이 필드는 특정 Wagtail 설치에서 그렇게 구축되지 않는 한 프런트엔드 콘텐츠에서 아무것도 하지 않습니다.
그러나 이는 :meth:`~wagtail.query.PageQuerySet.in_menu` QuerySet 필터에서 이 필드를 사용하는 페이지를 더 쉽게 쿼리하는 데 사용됩니다.
기본값은 ``False`` 이며, 모델에서 ``show_in_menus_default = True`` 로 재정의할 수 있습니다.
.. note::
모든 페이지에 대한 전역 기본값을 설정하려면 ``Page`` 모델을 처음 가져올 때 ``Page.show_in_menus_default = True`` 를 한 번 설정하십시오.
.. attribute:: locked
(부울)
``True`` 로 설정되면 Wagtail 편집기는 어떤 사용자도
페이지의 콘텐츠를 편집할 수 없습니다.
``locked_by`` 도 설정된 경우 해당 사용자만 페이지를 편집할 수 있습니다.
.. attribute:: locked_by
(사용자 모델에 대한 외래 키)
현재 페이지를 잠근 사용자입니다. 이 사용자만 페이지를 편집할 수 있습니다.
``locked`` 가 ``True`` 일 때 이것이 ``None`` 이면 아무도 페이지를 편집할 수 없습니다.
.. attribute:: locked_at
(날짜/시간)
페이지가 잠긴 날짜/시간입니다.
.. attribute:: alias_of
(다른 페이지에 대한 외래 키)
설정된 경우 이 페이지는 이 필드에서 참조되는 페이지의 별칭입니다.
.. attribute:: locale
(Locale에 대한 외래 키)
이 외래 키는 페이지 언어를 나타내는 ``Locale`` 객체에 연결됩니다.
.. attribute:: translation_key
(uuid)
새 페이지가 생성될 때마다 무작위로 생성되는 UUID입니다.
이는 해당 인스턴스의 모든 번역과 공유되므로 번역을 쿼리하는 데 사용할 수 있습니다.
``translation_key`` 값은 각 로케일의 한 페이지에서만 사용할 수 있습니다.
```
### 메서드 및 속성
제공된 모델 필드 외에도 `Page` 에는 자체 모델을 만들 때 참조, 사용 또는 재정의할 수 있는 많은 속성 및 메서드가 있습니다.
```{note}
[django-treebeard](inv:treebeard:std:doc#index)의 [노드 API](inv:treebeard:std:doc#api)도 참조하십시오. ``Page`` 는 [materialized path tree](inv:treebeard:std:doc#mp_tree) 노드의 서브클래스입니다.
```
```{eval-rst}
.. class:: Page
:no-index:
.. automethod:: get_specific
.. autoattribute:: specific
.. autoattribute:: specific_deferred
.. autoattribute:: specific_class
.. autoattribute:: cached_content_type
.. autoattribute:: page_type_display_name
.. automethod:: get_url
.. automethod:: get_full_url
.. autoattribute:: full_url
.. automethod:: relative_url
.. automethod:: get_site
.. automethod:: get_url_parts
.. automethod:: route
.. automethod:: serve
.. automethod:: route_for_request
.. automethod:: find_for_request
.. method:: get_default_privacy_setting(request)
페이지의 기본 개인 정보 설정을 지정합니다.
이 메서드는 최소한 'type' 키가 있는 사전을 반환해야 합니다. 값은 :class:`~wagtail.models.PageViewRestriction` 의 :attr:`~wagtail.models.PageViewRestriction.restriction_type` 에서 다음 값 중 하나여야 합니다.
- ``BaseViewRestriction.NONE``: 페이지가 공개되어 누구나 액세스할 수 있습니다. (기본값) - '{"type": BaseViewRestriction.NONE}'
- ``BaseViewRestriction.LOGIN``: 페이지가 비공개이며 인증된 사용자만 액세스할 수 있습니다. - '{"type": BaseViewRestriction.LOGIN}'
- ``BaseViewRestriction.PASSWORD``: 페이지가 비공개이며 공유 암호가 있는 사용자만 액세스할 수 있습니다. (사전에 추가 ``password`` 키 필요) - '{"type": BaseViewRestriction.PASSWORD, "password": "P@ssw0rd123!"}'
- ``BaseViewRestriction.GROUPS``: 페이지가 비공개이며 특정 그룹의 사용자만 액세스할 수 있습니다. (그룹 객체 목록이 있는 추가 ``groups`` 키 필요) - '{"type": BaseViewRestriction.GROUPS, "groups": [moderators, editors]}'
예시
.. code-block:: python
class BreadsIndexPage(Page):
#...
def get_default_privacy_setting(request):
from wagtail.models import BaseViewRestriction
# 편집자가 foo.add_bar 권한을 가지고 있다면 기본값을 중재자 및 편집자 그룹이 체크된 그룹으로 설정합니다.
if request.user.has_perm("foo.add_bar"):
moderators = Group.objects.filter(name="Moderators").first()
editors = Group.objects.filter(name="Editors").first()
return {"type": BaseViewRestriction.GROUPS, "groups": [moderators,editors]}
else:
return {"type": BaseViewRestriction.NONE}
.. autoattribute:: context_object_name
페이지의 ``Context`` 에서 페이지 인스턴스에 대한 사용자 지정 이름입니다.
.. automethod:: get_context
.. automethod:: get_template
.. automethod:: get_admin_display_title
.. autoattribute:: allowed_http_methods
이 속성을 사용자 지정할 때 개발자는 Python의 내장 ``http.HTTPMethod`` 열거형의 값을 목록에 사용하는 것이 좋습니다. 더 강력하고 이미 메모리에 존재하는 값을 사용하기 때문입니다. 예를 들어:
.. code-block:: python
from http import HTTPMethod
class MyPage(Page):
allowed_http_methods = [HTTPMethod.GET, HTTPMethod.OPTIONS]
``http.HTTPMethod`` 열거형은 Python 3.11까지 추가되지 않았으므로 프로젝트에서 이전 버전의 Python을 사용하는 경우 대신 대문자 문자열을 사용할 수 있습니다. 예를 들어:
.. code-block:: python
class MyPage(Page):
allowed_http_methods = ["GET", "OPTIONS"]
.. automethod:: check_request_method
.. automethod:: handle_options_request
.. autoattribute:: preview_modes
.. autoattribute:: default_preview_mode
.. autoattribute:: preview_sizes
.. autoattribute:: default_preview_size
.. automethod:: serve_preview
.. automethod:: get_parent
.. automethod:: get_children
.. automethod:: get_ancestors
.. automethod:: get_descendants
.. automethod:: get_siblings
.. automethod:: get_translations
.. automethod:: get_translation
.. automethod:: get_translation_or_none
.. automethod:: has_translation
.. automethod:: copy_for_translation
.. method:: get_admin_default_ordering
관리자 페이지 색인을 보고 검색 결과를 보지 않을 때 자식 페이지의 기본 정렬 순서를 반환합니다.
다음 정렬 순서를 사용할 수 있습니다.
- ``'content_type'``
- ``'-content_type'``
- ``'latest_revision_created_at'``
- ``'-latest_revision_created_at'``
- ``'live'``
- ``'-live'``
- ``'ord'``
- ``'title'``
- ``'-title'``
예를 들어, 페이지 수가 20개 미만인 경우에만 모든 자식 페이지에 대해 제목별로 페이지를 정렬하도록 합니다.
.. code-block:: python
class BreadsIndexPage(Page):
def get_admin_default_ordering(self):
if Page.objects.child_of(self).count() < 20:
return 'title'
return self.admin_default_ordering
.. attribute:: admin_default_ordering
메서드 ``get_admin_default_ordering()`` 에 대한 속성 버전으로, 기본값은 ``'-latest_revision_created_at'`` 입니다.
.. autoattribute:: localized
.. autoattribute:: localized_draft
.. attribute:: search_fields
검색 엔진에서 색인화할 필드 목록입니다. 검색 문서 :ref:`wagtailsearch_indexing_fields` 를 참조하십시오.
.. attribute:: subpage_types
이 페이지 유형의 자식으로 생성할 수 있는 페이지 모델 목록입니다. 예를 들어, ``BlogIndex`` 페이지는 ``BlogPage`` 를 자식으로 허용할 수 있지만 ``JobPage`` 는 허용하지 않습니다.
.. code-block:: python
class BlogIndex(Page):
subpage_types = ['mysite.BlogPage', 'mysite.BlogArchivePage']
주어진 페이지에 대한 자식 페이지 생성을 완전히 차단하려면 ``subpage_types`` 속성을 빈 배열로 설정합니다.
.. code-block:: python
class BlogPage(Page):
subpage_types = []
.. attribute:: parent_page_types
부모 페이지 유형으로 허용되는 페이지 모델 목록입니다. 예를 들어, ``BlogPage`` 는 ``BlogIndex`` 페이지 아래에서만 생성할 수 있습니다.
.. code-block:: python
class BlogPage(Page):
parent_page_types = ['mysite.BlogIndexPage']
페이지는 ``parent_page_types`` 를 빈 배열로 설정하여 전혀 생성되지 않도록 할 수 있습니다(이는 한 번만 생성되어야 하는 고유한 페이지를 만드는 데 유용합니다).
.. code-block:: python
class HiddenPage(Page):
parent_page_types = []
루트 페이지 아래에서만 페이지를 생성할 수 있도록 하려면(예: ``HomePage`` 모델의 경우) ``parent_page_type`` 을 ``['wagtailcore.Page']`` 로 설정합니다.
.. code-block:: python
class HomePage(Page):
parent_page_types = ['wagtailcore.Page']
.. automethod:: can_exist_under
.. automethod:: can_create_at
.. automethod:: can_move_to
.. automethod:: get_route_paths
.. attribute:: password_required_template
이 모델을 사용하는 보호된 페이지에 대한 로그인 폼을 렌더링하는 데 사용될 템플릿 파일을 정의합니다. 이는 설정에서 ``WAGTAIL_PASSWORD_REQUIRED_TEMPLATE`` 을 사용하여 정의된 기본값을 재정의합니다. :ref:`private_pages` 를 참조하십시오.
.. attribute:: is_creatable
이 페이지를 Wagtail 관리를 통해 생성할 수 있는지 여부를 제어합니다. 기본값은 ``True`` 이며, 서브클래스에 의해 상속되지 않습니다. 이는 :ref:`multi-table inheritance ` 를 사용할 때 기본 모델이 실제 페이지로 생성되는 것을 막는 데 유용합니다.
.. attribute:: max_count
Wagtail 관리 인터페이스를 통해 생성할 수 있는 이 유형의 최대 페이지 수를 제어합니다. 이는 "이러한 페이지를 최대 3개까지 허용"해야 하거나 단일 페이지에 유용합니다.
.. attribute:: max_count_per_parent
단일 부모 페이지 아래에서 생성할 수 있는 이 유형의 최대 페이지 수를 제어합니다.
.. attribute:: private_page_options
페이지 유형에 사용할 수 있는 개인 정보 옵션을 제어합니다.
다음 옵션을 사용할 수 있습니다.
- ``'password'`` - 공유 암호를 사용하여 제한할 수 있습니다.
- ``'groups'`` - 특정 그룹의 사용자로 제한할 수 있습니다.
- ``'login'`` - 로그인한 사용자로 제한할 수 있습니다.
.. code-block:: python
class BreadPage(Page):
...
# 기본값
private_page_options = ['password', 'groups', 'login']
# 공유 암호 비활성화
private_page_options = ['groups', 'login']
# 공유 암호만
private_page_options = ['password']
# 이 페이지 모델에 대한 개인 정보 옵션 없음
private_page_options = []
.. attribute:: exclude_fields_in_copy
페이지가 복사될 때 포함되지 않을 필드 이름 배열입니다.
``ClusterableModel`` 을 사용하지 않거나 복사해서는 안 되는 관계가 있는 경우 유용합니다.
.. code-block:: python
class BlogPage(Page):
exclude_fields_in_copy = ['special_relation', 'custom_uuid']
다음 필드는 복사 시 항상 제외됩니다. - ``['id', 'path', 'depth', 'numchild', 'url_path', 'path']``.
.. attribute:: base_form_class
이 유형의 페이지를 Wagtail 페이지 편집기에서 편집하는 데 기본으로 사용되는 폼 클래스입니다.
이 속성은 모델에 설정하여 페이지 편집기 폼을 사용자 지정할 수 있습니다.
폼은 :class:`~wagtail.admin.forms.WagtailAdminPageForm` 의 서브클래스여야 합니다.
자세한 내용은 :ref:`custom_edit_handler_forms` 를 참조하십시오.
.. automethod:: with_content_json
.. automethod:: save
.. automethod:: copy
.. method:: move(new_parent, pos=None)
페이지와 모든 하위 페이지를 새 부모로 이동합니다.
자세한 내용은 :meth:`django-treebeard ` 를 참조하십시오.
.. automethod:: create_alias
.. automethod:: update_aliases
.. automethod:: get_cache_key_components
.. autoattribute:: cache_key
```
(site_model_ref)=
## `Site`
`Site` 모델은 서버가 응답하는 각 호스트 이름에 대해 트리의 어떤 부분을 사용할지 관리자가 구성할 수 있도록 하므로 다중 사이트 설치에 유용합니다.
{meth}`~wagtail.models.Site.find_for_request` 함수는 주어진 HTTP 요청을 처리할 Site 객체를 반환합니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: Site
.. attribute:: hostname
(텍스트)
스키마, 포트 및 경로를 제외한 사이트의 호스트 이름입니다.
예: ``www.mysite.com``
.. note::
사이트의 루트 URL을 가져오는 방법을 찾고 있다면 :attr:`~Site.root_url` 속성을 사용하십시오.
.. attribute:: port
(숫자)
사이트가 응답하는 포트 번호입니다.
.. attribute:: site_name
(텍스트 - 선택 사항)
사이트의 사람이 읽을 수 있는 이름입니다. Wagtail 자체에서는 사용되지 않지만, ```` 요소와 같이 사이트 프런트엔드에서 사용하기에 적합합니다.
예: ``Rod의 새 세상``
.. attribute:: root_page
(:class:`~wagtail.models.Page` 에 대한 외래 키)
사이트의 루트 페이지에 대한 링크입니다. 이 페이지는 사이트의 ``/`` URL에 나타나는 페이지이며 일반적으로 홈페이지입니다.
.. attribute:: is_default_site
(부울)
사이트가 기본값인 경우 ``True`` 로 설정됩니다. 하나의 사이트만 기본값이 될 수 있습니다.
기본 사이트는 필요한 호스트 이름/포트를 가진 사이트를 찾을 수 없는 경우 대체로 사용됩니다.
```
### 메서드 및 속성
```{eval-rst}
.. class:: Site
:no-index:
.. automethod:: find_for_request
.. autoattribute:: root_url
이것은 사이트의 URL을 반환합니다. :attr:`~Site.hostname` 및 :attr:`~Site.port` 필드에서 계산됩니다.
URL의 스키마 부분은 :attr:`~Site.port` 필드의 값에 따라 계산됩니다.
- 80 = ``http://``
- 443 = ``https://``
- 다른 모든 것은 ``http://`` 스키마를 사용하며 포트는 호스트 이름 끝에 추가됩니다(예: ``http://mysite.com:8000/``)
.. automethod:: get_site_root_paths
```
(locale_model_ref)=
## `Locale`
`Locale` 모델은 사이트에서 사용할 수 있는 언어 및/또는 로케일 세트를 정의합니다.
각 `Locale` 레코드는 {ref}`wagtail_content_languages_setting` 설정에 정의된 "언어 코드"에 해당합니다.
Wagtail은 처음에 모든 기존 콘텐츠에 대한 기본 언어로 하나의 `Locale` 을 설정합니다.
이 첫 번째 로케일은 `LANGUAGE_CODE` 에 정의된 사이트 기본 언어 코드와 가장 일치하는 `WAGTAIL_CONTENT_LANGUAGES` 의 값을 자동으로 선택합니다.
기본 언어 코드가 나중에 변경되면 Wagtail은 새 `Locale` 레코드를 자동으로 만들거나 기존 레코드를 업데이트하지 않습니다.
국제화가 활성화되기 전에 모든 페이지는 이 기본 `Locale` 레코드를 사용합니다.
이는 데이터베이스 제약 조건을 충족하고 나중에 국제화를 더 쉽게 켤 수 있도록 하기 위함입니다.
### `WAGTAIL_CONTENT_LANGUAGES` 변경
`WAGTAIL_CONTENT_LANGUAGES` 에서 언어를 추가하거나 제거할 수 있습니다.
`WAGTAIL_CONTENT_LANGUAGES` 에서 옵션을 제거하기 전에 `Locale`
레코드를 다른 콘텐츠 언어를 사용하도록 업데이트하거나 삭제하는 것이 중요합니다.
유효하지 않은 콘텐츠 언어를 가진 `Locale` 인스턴스는 모든
데이터베이스 쿼리에서 자동으로 필터링되어 편집하거나 볼 수 없게 됩니다.
### 메서드 및 속성
```{eval-rst}
.. class:: Locale
.. autoattribute:: language_code
.. automethod:: get_default
.. automethod:: get_active
.. autoattribute:: language_name
.. autoattribute:: language_name_local
.. autoattribute:: language_name_localized
.. autoattribute:: is_default
.. autoattribute:: is_active
.. autoattribute:: is_bidi
.. automethod:: get_display_name
```
## `TranslatableMixin`
`TranslatableMixin` 은 번역 가능하도록 모든 비페이지 Django 모델에 추가할 수 있는 추상 모델입니다.
페이지에는 이미 이 믹스인이 포함되어 있으므로 추가할 필요가 없습니다.
관리자에서 비페이지 모델을 번역 가능하게 하려면 [스니펫으로 등록](wagtailsnippets_registering)해야 합니다. [](translatable_snippets)도 참조하십시오.
### 데이터베이스 필드
```{eval-rst}
.. class:: TranslatableMixin
.. attribute:: locale
(:class:`wagtail.models.Locale` 에 대한 외래 키)
페이지의 경우 부모 페이지의 로케일로 기본 설정됩니다.
.. attribute:: translation_key
(uuid)
새 모델 인스턴스가 생성될 때마다 무작위로 생성되는 UUID입니다.
이는 해당 인스턴스의 모든 번역과 공유되므로 번역을 쿼리하는 데 사용할 수 있습니다.
```
`translation_key` 및 `locale` 필드에는 객체가 한 언어로 두 번 이상 번역되는 것을 방지하기 위한 고유 키 제약 조건이 있습니다.
```{note}
이는 현재 `TranslatableMixin.Meta` 의 {attr}`~django.db.models.Options.unique_together` 를 통해 강제되지만, 향후 `TranslatableMixin.Meta.constraints` 의 {class}`~django.db.models.UniqueConstraint` 로 대체될 수 있습니다.
모델이 [`Meta` 클래스](inv:django#ref/models/options)를 정의하는 경우(새 정의 또는 `TranslatableMixin.Meta` 를 명시적으로 상속하는 경우), `unique_together` 또는 {attr}`~django.db.models.Options.constraints` 를 설정할 때 주의하십시오. `translation_key` 및 `locale` 에 `unique_together` 또는 `UniqueConstraint`(둘 다 아님)가 있는지 확인하십시오. 이에 대한 시스템 검사가 있습니다.
```
### 메서드 및 속성
```{eval-rst}
.. class:: TranslatableMixin
:no-index:
.. automethod:: get_translations
.. automethod:: get_translation
.. automethod:: get_translation_or_none
.. automethod:: has_translation
.. automethod:: copy_for_translation
.. automethod:: get_translation_model
.. autoattribute:: localized
```
## `PreviewableMixin`
`PreviewableMixin` 은 인스턴스를 미리 볼 수 있도록 모든 비페이지 Django 모델에 추가할 수 있는 믹스인 클래스입니다.
페이지에는 이미 이 믹스인이 포함되어 있으므로 추가할 필요가 없습니다.
관리자에서 비페이지 모델을 미리 볼 수 있게 하려면 [스니펫으로 등록](wagtailsnippets_registering)해야 합니다. [](wagtailsnippets_making_snippets_previewable)도 참조하십시오.
### 메서드 및 속성
```{eval-rst}
.. class:: PreviewableMixin
.. autoattribute:: preview_modes
.. autoattribute:: default_preview_mode
.. autoattribute:: preview_sizes
.. autoattribute:: default_preview_size
.. automethod:: is_previewable
.. automethod:: get_preview_context
.. automethod:: get_preview_template
.. automethod:: serve_preview
```
## `RevisionMixin`
`RevisionMixin` 은 인스턴스의 개정을 저장할 수 있도록 모든 비페이지 Django 모델에 추가할 수 있는 추상 모델입니다.
페이지에는 이미 이 믹스인이 포함되어 있으므로 추가할 필요가 없습니다.
관리자에서 비페이지 모델을 개정 가능하게 하려면 [스니펫으로 등록](wagtailsnippets_registering)해야 합니다. [](wagtailsnippets_saving_revisions_of_snippets)도 참조하십시오.
### 데이터베이스 필드
```{eval-rst}
.. class:: RevisionMixin
.. attribute:: latest_revision
(:class:`~wagtail.models.Revision` 에 대한 외래 키)
이것은 객체에 대해 생성된 최신 개정을 가리킵니다. 이 참조는 성능 최적화를 위해 데이터베이스에 저장됩니다.
```
### 메서드 및 속성
```{eval-rst}
.. class:: RevisionMixin
:no-index:
.. autoattribute:: _revisions
.. autoattribute:: revisions
.. automethod:: save_revision
.. automethod:: get_latest_revision_as_object
.. automethod:: with_content_json
```
## `DraftStateMixin`
`DraftStateMixin` 은 인스턴스에 게시되지 않은 변경 사항을 허용하도록 모든 비페이지 Django 모델에 추가할 수 있는 추상 모델입니다.
이 믹스인은 {class}`~wagtail.models.RevisionMixin` 이 적용되어야 합니다. 페이지에는 이미 이 믹스인이 포함되어 있으므로 추가할 필요가 없습니다.
관리자에서 비페이지 모델에 게시 기능이 있도록 하려면 [스니펫으로 등록](wagtailsnippets_registering)해야 합니다. [](wagtailsnippets_saving_draft_changes_of_snippets)도 참조하십시오.
### 데이터베이스 필드
```{eval-rst}
.. class:: DraftStateMixin
.. attribute:: live
(부울)
객체가 게시된 경우 ``True`` 로 설정되는 부울입니다.
참고: 이 필드는 기본적으로 ``True`` 로 설정되어 프로그래밍 방식으로 생성된 모든 객체가 기본적으로 게시됩니다.
.. attribute:: live_revision
(:class:`~wagtail.models.Revision` 에 대한 외래 키)
이것은 현재 라이브 상태인 개정을 가리킵니다.
.. attribute:: has_unpublished_changes
(부울)
객체가 초안이거나 초안 변경 사항과 함께 게시된 경우 ``True`` 로 설정되는 부울입니다.
.. attribute:: first_published_at
(날짜/시간)
객체가 처음 게시된 날짜/시간입니다.
.. attribute:: last_published_at
(날짜/시간)
객체가 마지막으로 게시된 날짜/시간입니다.
```
### 메서드 및 속성
```{eval-rst}
.. class:: DraftStateMixin
:no-index:
.. automethod:: publish
.. automethod:: unpublish
.. automethod:: with_content_json
```
## `LockableMixin`
`LockableMixin` 은 인스턴스를 잠글 수 있도록 모든 비페이지 Django 모델에 추가할 수 있는 추상 모델입니다.
페이지에는 이미 이 믹스인이 포함되어 있으므로 추가할 필요가 없습니다. 자세한 내용은 [](wagtailsnippets_locking_snippets)를 참조하십시오.
관리자에서 비페이지 모델을 잠금 가능하게 하려면 [스니펫으로 등록](wagtailsnippets_registering)해야 합니다. [](wagtailsnippets_locking_snippets)도 참조하십시오.
### 데이터베이스 필드
```{eval-rst}
.. class:: LockableMixin
.. attribute:: locked
(부울)
객체가 잠긴 경우 ``True`` 로 설정되는 부울입니다.
.. attribute:: locked_at
(날짜/시간)
객체가 잠긴 날짜/시간입니다.
.. attribute:: locked_by
(사용자 모델에 대한 외래 키)
객체를 잠근 사용자입니다.
```
### 메서드 및 속성
```{eval-rst}
.. class:: LockableMixin
:no-index:
.. automethod:: get_lock
.. automethod:: with_content_json
```
## `WorkflowMixin`
`WorkflowMixin` 은 인스턴스를 워크플로에 제출할 수 있도록 모든 비페이지 Django 모델에 추가할 수 있는 믹스인 클래스입니다.
이 믹스인은 {class}`~wagtail.models.RevisionMixin` 및 {class}`~wagtail.models.DraftStateMixin` 이 적용되어야 합니다. 페이지에는 이미 이 믹스인이 포함되어 있으므로 추가할 필요가 없습니다. 자세한 내용은 [](wagtailsnippets_enabling_workflows)를 참조하십시오.
관리자에서 비페이지 모델에 워크플로 기능이 있도록 하려면 [스니펫으로 등록](wagtailsnippets_registering)해야 합니다. [](wagtailsnippets_enabling_workflows)도 참조하십시오.
### 메서드 및 속성
```{eval-rst}
.. class:: WorkflowMixin
.. automethod:: get_default_workflow
.. autoattribute:: has_workflow
.. automethod:: get_workflow
.. autoattribute:: _workflow_states
.. autoattribute:: workflow_states
.. autoattribute:: workflow_in_progress
.. autoattribute:: current_workflow_state
.. autoattribute:: current_workflow_task_state
.. autoattribute:: current_workflow_task
```
(revision_model_ref)=
## `Revision`
페이지가 편집될 때마다 새 `Revision` 이 생성되어 데이터베이스에 저장됩니다. 이는 페이지에 대한 모든 변경 사항의 전체 기록을 찾는 데 사용할 수 있으며, 새 변경 사항이 라이브로 전환되기 전에 보관할 장소도 제공합니다.
- 개정은 {class}`~wagtail.models.RevisionMixin` 의 인스턴스에서 {meth}`~RevisionMixin.save_revision` 메서드를 호출하여 생성할 수 있습니다.
- 페이지의 내용은 JSON 직렬화 가능하며 {attr}`~Revision.content` 필드에 저장됩니다.
- {meth}`~Revision.as_object` 메서드를 호출하여 객체의 모델 인스턴스로 `Revision` 을 검색할 수 있습니다.
더 이상 사용되지 않는 오래된 개정을 삭제하려면 [`purge_revisions`](purge_revisions) 명령을 사용할 수 있습니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: Revision
.. attribute:: content_object
(제네릭 외래 키)
이 개정이 속한 객체입니다. 페이지 개정의 경우 객체는 특정 클래스의 인스턴스입니다.
.. attribute:: content_type
(:class:`~django.contrib.contenttypes.models.ContentType` 에 대한 외래 키)
이 개정이 속한 객체의 콘텐츠 유형입니다. 페이지 개정의 경우 특정 페이지 유형의 콘텐츠 유형을 의미합니다.
.. attribute:: base_content_type
(:class:`~django.contrib.contenttypes.models.ContentType` 에 대한 외래 키)
이 개정이 속한 객체의 기본 콘텐츠 유형입니다. 페이지 개정의 경우 :class:`~wagtail.models.Page` 모델의 콘텐츠 유형을 의미합니다.
.. attribute:: object_id
(문자열)
이 개정이 속한 객체의 기본 키입니다.
.. attribute:: created_at
(날짜/시간)
개정이 생성된 시간입니다.
.. attribute:: user
(사용자 모델에 대한 외래 키)
개정을 만든 사용자입니다.
.. attribute:: content
(사전)
개정이 생성될 당시 객체의 JSON 콘텐츠입니다.
```
### 관리자
```{eval-rst}
.. class:: Revision
:no-index:
.. attribute:: objects
이 기본 관리자는 데이터베이스의 모든 ``Revision`` 객체를 검색하는 데 사용됩니다. 또한 특정 객체의 개정을 쿼리할 수 있는 ``wagtail.models.RevisionsManager.for_instance`` 메서드를 제공합니다.
예시:
.. code-block:: python
Revision.objects.all()
Revision.objects.for_instance(my_object)
.. attribute:: page_revisions
이 관리자는 기본 관리자를 확장하며 페이지에 속하는 모든 ``Revision`` 객체를 검색하는 데 사용됩니다.
예시:
.. code-block:: python
Revision.page_revisions.all()
```
### 메서드 및 속성
```{eval-rst}
.. class:: Revision
:no-index:
.. automethod:: as_object
이 메서드는 이 개정을 객체의 특정 클래스 인스턴스로 검색합니다. 개정이 페이지에 속하는 경우 :class:`~wagtail.models.Page` 의 특정 서브클래스 인스턴스가 됩니다.
.. automethod:: is_latest_revision
이 개정이 객체의 최신 개정인 경우 ``True`` 를 반환합니다.
.. automethod:: publish
이것을 호출하면 이 개정의 내용이 라이브 객체로 복사됩니다. 객체가 초안인 경우 게시됩니다.
.. autoattribute:: base_content_object
이 속성은 이 개정이 속한 객체를 기본 클래스의 인스턴스로 반환합니다.
```
## `GroupPagePermission`
### 데이터베이스 필드
```{eval-rst}
.. class:: GroupPagePermission
.. attribute:: group
(``django.contrib.auth.models.Group`` 에 대한 외래 키)
.. attribute:: page
(:class:`~wagtail.models.Page` 에 대한 외래 키)
```
## `PageViewRestriction`
### 데이터베이스 필드
```{eval-rst}
.. class:: PageViewRestriction
.. attribute:: page
(:class:`~wagtail.models.Page` 에 대한 외래 키)
.. attribute:: password
(텍스트)
.. attribute:: restriction_type
(텍스트)
옵션: none, password, groups, login
```
## `Orderable` (추상)
### 데이터베이스 필드
```{eval-rst}
.. class:: Orderable
.. attribute:: sort_order
(숫자)
```
## `Workflow`
워크플로는 작업이 객체에 대해 수행되려면(일반적으로 게시) 승인되어야 하는 작업 시퀀스를 나타냅니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: Workflow
.. attribute:: name
(텍스트)
워크플로의 사람이 읽을 수 있는 이름입니다.
.. attribute:: active
(부울)
워크플로가 활성 상태인지 여부: 활성 워크플로는 워크플로에 추가하고 시작할 수 있습니다. 비활성 워크플로는 추가할 수 없으며, 기존 워크플로에 있는 경우 건너뜁니다.
```
### 메서드 및 속성
```{eval-rst}
.. class:: Workflow
:no-index:
.. automethod:: start
.. autoattribute:: tasks
.. automethod:: deactivate
.. automethod:: all_pages
```
## `WorkflowState`
워크플로 상태는 객체에서 시작된 워크플로의 상태를 나타냅니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: WorkflowState
.. attribute:: content_object
(제네릭 외래 키)
워크플로가 시작된 객체입니다. 페이지 워크플로의 경우 객체는 기본 ``Page`` 모델의 인스턴스입니다.
.. attribute:: content_type
(:class:`~django.contrib.contenttypes.models.ContentType` 에 대한 외래 키)
이 워크플로 상태가 속한 객체의 콘텐츠 유형입니다. 페이지 워크플로의 경우 특정 페이지 유형의 콘텐츠 유형을 의미합니다.
.. attribute:: base_content_type
(:class:`~django.contrib.contenttypes.models.ContentType` 에 대한 외래 키)
이 워크플로 상태가 속한 객체의 기본 콘텐츠 유형입니다. 페이지 워크플로의 경우 :class:`~wagtail.models.Page` 모델의 콘텐츠 유형을 의미합니다.
.. attribute:: object_id
(문자열)
이 개정이 속한 객체의 기본 키입니다.
.. attribute:: workflow
(``Workflow`` 에 대한 외래 키)
``WorkflowState`` 가 나타내는 상태인 워크플로입니다.
.. attribute:: status
(텍스트)
워크플로의 현재 상태(옵션은 ``TaskState.STATUS_CHOICES``)입니다.
.. attribute:: created_at
(날짜/시간)
이 ``WorkflowState`` 인스턴스가 생성된 시점 - 워크플로가 시작된 시점
.. attribute:: requested_by
(사용자 모델에 대한 외래 키)
이 워크플로를 시작한 사용자입니다.
.. attribute:: current_task_state
(``TaskState`` 에 대한 외래 키)
워크플로가 현재 있는 작업에 대한 ``TaskState`` 모델: 완료 중(진행 중인 경우) 또는 최종 작업 상태(완료된 경우)
```
### 메서드 및 속성
```{eval-rst}
.. class:: WorkflowState
:no-index:
.. attribute:: STATUS_CHOICES
``status`` 필드에 대한 가능한 옵션과 해당 상세 이름의 튜플입니다. 옵션은 ``STATUS_IN_PROGRESS``, ``STATUS_APPROVED``,
``STATUS_CANCELLED``, ``STATUS_REJECTED`` 및 ``STATUS_SKIPPED`` 입니다.
.. automethod:: update
.. automethod:: get_next_task
.. automethod:: cancel
.. automethod:: finish
.. automethod:: resume
.. automethod:: copy_approved_task_states_to_revision
.. automethod:: all_tasks_with_status
.. automethod:: revisions
```
## `Task`
작업은 워크플로가 성공적으로 완료되려면 승인되어야 하는 워크플로의 단계를 나타냅니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: Task
.. attribute:: name
(텍스트)
작업의 사람이 읽을 수 있는 이름입니다.
.. attribute:: active
(부울)
작업이 활성 상태인지 여부: 활성 워크플로는 워크플로에 추가하고 시작할 수 있습니다. 비활성 워크플로는 추가할 수 없으며,
기존 워크플로에 있는 경우 건너뜁니다.
.. attribute:: content_type
(:class:`~django.contrib.contenttypes.models.ContentType` 에 대한 외래 키)
이 작업의 특정 모델을 나타내는 :class:`~django.contrib.contenttypes.models.ContentType` 객체에 대한 외래 키입니다.
```
### 메서드 및 속성
```{eval-rst}
.. class:: Task
:no-index:
.. autoattribute:: workflows
.. autoattribute:: active_workflows
.. attribute:: task_state_class
이 작업에 대한 상태 정보를 저장하기 위해 생성할 특정 작업 상태 클래스입니다. 지정되지 않은 경우 ``TaskState`` 가 됩니다.
.. automethod:: get_verbose_name
.. autoattribute:: specific
.. automethod:: start
.. automethod:: on_action
.. automethod:: user_can_access_editor
.. automethod:: user_can_lock
.. automethod:: user_can_unlock
.. automethod:: locked_for_user
.. automethod:: get_actions
.. automethod:: get_task_states_user_can_moderate
.. automethod:: deactivate
.. automethod:: get_form_for_action
.. automethod:: get_template_for_action
.. automethod:: get_description
```
## `TaskState`
작업 상태는 특정 개정에서 작업 진행 상황에 대한 상태 정보를 저장합니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: TaskState
.. attribute:: workflow_state
(:class:`~wagtail.models.WorkflowState` 에 대한 외래 키)
이 작업 상태를 시작한 워크플로 상태입니다.
.. attribute:: revision
(:class:`~wagtail.models.Revision` 에 대한 외래 키)
이 작업 상태가 생성된 개정입니다.
.. attribute:: task
(:class:`~wagtail.models.Task` 에 대한 외래 키)
이 작업 상태가 상태 정보를 저장하는 작업입니다.
.. attribute:: status
(텍스트)
이 개정에서 작업의 완료 상태입니다. 옵션은 ``TaskState.STATUS_CHOICES`` 에서 사용할 수 있습니다.
.. attribute:: content_type
(:class:`~django.contrib.contenttypes.models.ContentType` 에 대한 외래 키)
이 작업의 특정 모델을 나타내는 :class:`~django.contrib.contenttypes.models.ContentType` 객체에 대한 외래 키입니다.
.. attribute:: started_at
(날짜/시간)
이 작업 상태가 생성된 시점입니다.
.. attribute:: finished_at
(날짜/시간)
이 작업 상태가 취소, 거부 또는 승인된 시점입니다.
.. attribute:: finished_by
(사용자 모델에 대한 외래 키)
작업을 완료(취소, 거부, 승인)한 사용자입니다.
.. attribute:: comment
(텍스트)
작업이 완료될 때 사용자가 일반적으로 추가하는 텍스트 주석입니다.
```
### 메서드 및 속성
```{eval-rst}
.. class:: TaskState
:no-index:
.. attribute:: STATUS_CHOICES
``status`` 필드에 대한 가능한 옵션과 해당 상세 이름의 튜플입니다. 옵션은 ``STATUS_IN_PROGRESS``, ``STATUS_APPROVED``,
``STATUS_CANCELLED``, ``STATUS_REJECTED`` 및 ``STATUS_SKIPPED`` 입니다.
.. attribute:: exclude_fields_in_copy
``TaskState.copy()`` 메서드가 호출될 때 복사되지 않을 필드 목록입니다.
.. autoattribute:: specific
.. automethod:: approve
.. automethod:: reject
.. autoattribute:: task_type_started_at
.. automethod:: cancel
.. automethod:: copy
.. automethod:: get_comment
```
## `WorkflowTask`
특정 워크플로에서 작업의 순서를 나타냅니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: WorkflowTask
.. attribute:: workflow
(``Workflow`` 에 대한 외래 키)
.. attribute:: task
(``Task`` 에 대한 외래 키)
.. attribute:: sort_order
(숫자)
워크플로에서 작업의 순서입니다.
```
## `WorkflowPage`
워크플로를 페이지 및 해당 하위 페이지에 할당하는 것을 나타냅니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: WorkflowPage
.. attribute:: workflow
(:class:`~wagtail.models.Workflow` 에 대한 외래 키)
.. attribute:: page
(:class:`~wagtail.models.Page` 에 대한 외래 키)
```
## `WorkflowContentType`
워크플로를 Django 모델에 할당하는 것을 나타냅니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: WorkflowContentType
.. attribute:: workflow
(:class:`~wagtail.models.Workflow` 에 대한 외래 키)
.. attribute:: content_type
(:class:`~django.contrib.contenttypes.models.ContentType` 에 대한 외래 키)
워크플로에 할당된 모델을 나타내는 ``ContentType`` 객체에 대한 외래 키입니다.
```
## `BaseLogEntry`
객체에 대해 수행된 작업 기록을 나타내는 추상 기본 클래스입니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: BaseLogEntry
.. attribute:: content_type
(:class:`~django.contrib.contenttypes.models.ContentType` 에 대한 외래 키)
이 모델의 특정 모델을 나타내는 :class:`~django.contrib.contenttypes.models.ContentType` 객체에 대한 외래 키입니다.
.. attribute:: label
(텍스트)
항목 생성 시 객체 제목
참고: Wagtail은 ``LogEntryManager.log_action`` 에 전달된 객체의 ``get_admin_display_title`` 또는 문자열 표현을 사용하려고 시도합니다.
.. attribute:: user
(사용자 모델에 대한 외래 키)
작업을 트리거한 사용자에 대한 외래 키입니다.
.. attribute:: revision
(:class:`Revision` 에 대한 외래 키)
현재 개정에 대한 외래 키입니다.
.. attribute:: data
(사전)
각 작업에 대한 추가 세부 정보의 JSON 표현입니다.
예를 들어, 페이지에서 복사할 때 원본 페이지 ID 및 제목. 또는 워크플로 전환 시 워크플로 ID/이름 및 다음 단계 ID/이름
.. attribute:: timestamp
(날짜/시간)
항목이 생성된 날짜/시간입니다.
.. attribute:: content_changed
(부울)
콘텐츠가 변경된 경우 ``True`` 로 설정할 수 있는 부울입니다.
.. attribute:: deleted
(부울)
객체가 삭제된 경우 ``True`` 로 설정할 수 있는 부울입니다. 사이트 기록 보고서에서 항목을 필터링하는 데 사용됩니다.
```
### 메서드 및 속성
```{eval-rst}
.. class:: BaseLogEntry
:no-index:
.. autoattribute:: user_display_name
.. autoattribute:: comment
.. autoattribute:: object_verbose_name
.. automethod:: object_id
```
## `PageLogEntry`
{class}`Page` 에 대해 수행된 작업 기록을 나타내며, {class}`BaseLogEntry` 를 서브클래스합니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: PageLogEntry
.. attribute:: page
(:class:`Page` 에 대한 외래 키)
작업이 수행되는 페이지에 대한 외래 키입니다.
```
## `Comment`
페이지에 대한 주석을 나타냅니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: Comment
.. attribute:: page
(:class:`Page` 에 대한 부모 키)
주석이 추가된 페이지에 대한 부모 키입니다.
.. attribute:: user
(사용자 모델에 대한 외래 키)
이 주석을 추가한 사용자에 대한 외래 키입니다.
.. attribute:: text
(텍스트)
주석의 텍스트 내용입니다.
.. attribute:: contentpath
(텍스트)
주석이 첨부된 필드 또는 스트림필드 블록의 경로로,
``field`` 또는 ``field.streamfield_block_id`` 형식입니다.
.. attribute:: position
(텍스트)
필드 내 주석 위치에 대한 식별자입니다. 사용되는 형식은 필드에 따라 결정됩니다.
.. attribute:: created_at
(날짜/시간)
주석이 생성된 날짜/시간입니다.
.. attribute:: updated_at
(날짜/시간)
주석이 업데이트된 날짜/시간입니다.
.. attribute:: revision_created
(:class:`Revision` 에 대한 외래 키)
주석이 생성된 개정에 대한 외래 키입니다.
.. attribute:: resolved_at
(날짜/시간)
주석이 해결된 날짜/시간(있는 경우)입니다.
.. attribute:: resolved_by
(사용자 모델에 대한 외래 키)
이 주석을 해결한 사용자(있는 경우)에 대한 외래 키입니다.
```
## `CommentReply`
주석 스레드에 대한 답글을 나타냅니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: CommentReply
.. attribute:: comment
(:class:`Comment` 에 대한 부모 키)
스레드를 시작한 주석에 대한 부모 키입니다.
.. attribute:: user
(사용자 모델에 대한 외래 키)
이 주석을 추가한 사용자에 대한 외래 키입니다.
.. attribute:: text
(텍스트)
주석의 텍스트 내용입니다.
.. attribute:: created_at
(날짜/시간)
주석이 생성된 날짜/시간입니다.
.. attribute:: updated_at
(날짜/시간)
주석이 업데이트된 날짜/시간입니다.
```
## `PageSubscription`
페이지 이벤트에 대한 이메일 알림 구독을 나타냅니다.
현재 주석 알림에만 사용됩니다.
### 데이터베이스 필드
```{eval-rst}
.. class:: PageSubscription
.. attribute:: page
(:class:`Page` 에 대한 부모 키)
.. attribute:: user
(사용자 모델에 대한 외래 키)
.. attribute:: comment_notifications
(부울)
사용자가 모든 주석에 대한 알림을 받아야 하는지,
아니면 참여하는 스레드의 주석에 대해서만 받아야 하는지 여부입니다.
```