0
0
mirror of https://github.com/wagtail/wagtail.git synced 2024-11-24 10:58:52 +01:00
wagtail/docs/advanced_topics/documents/custom_document_model.md
Neeraj P Yetheendran 8932c67270 Add full set of Documents app features
- Added customizing document upload form subsection in documents section
- Added storing and serving subpage
- Added overview section, including RichText and StreamField usage
- Closes #2001
2023-11-13 09:53:16 +11:00

1.6 KiB

Custom document model

An alternate Document model can be used to add custom behaviour and additional fields.

You need to complete the following steps in your project to do this:

  • Create a new document model that inherits from wagtail.documents.models.AbstractDocument. This is where you would add additional fields.
  • Point WAGTAILDOCS_DOCUMENT_MODEL to the new model.

Here's an example:

# models.py
from django.db import models

from wagtail.documents.models import Document, AbstractDocument

class CustomDocument(AbstractDocument):
    # Custom field example:
    source = models.CharField(
        max_length=255,
        blank=True,
        null=True
    )

    admin_form_fields = Document.admin_form_fields + (
        # Add all custom fields names to make them appear in the form:
        'source',
    )

Then in your settings module:

# Ensure that you replace app_label with the app you placed your custom
# model in.
WAGTAILDOCS_DOCUMENT_MODEL = 'app_label.CustomDocument'
Migrating from the built-in document model:

When changing an existing site to use a custom document model, no documents
will be copied to the new model automatically. Copying old documents to the
new model would need to be done manually with a
{ref}`data migration <django:data-migrations>`.

Templates that reference the built-in document model will continue
to work as before

Referring to the document model

.. module:: wagtail.documents
.. autofunction:: get_document_model
.. autofunction:: get_document_model_string