text: from django.db import models, migrations
  
  import mptt.fields
  
  
  class Migration(migrations.Migration):
      dependencies = [
          ('documents', '__first__'),
      ]
  
      operations = [
          migrations.CreateModel(
              name='Index',
              fields=[
                  (
                      'id', models.AutoField(
                          verbose_name='ID', serialize=False, auto_created=True,
                          primary_key=True
                      )
                  ),
                  (
                      'name', models.CharField(
                          help_text='Internal name used to reference this '
                          'index.', unique=True, max_length=64,
                          verbose_name='Name'
                      )
                  ),
                  (
                      'title', models.CharField(
                          help_text='The name that will be visible to users.',
                          unique=True, max_length=128, verbose_name='Title'
                      )
                  ),
                  (
                      'enabled', models.BooleanField(
                          default=True, help_text='Causes this index to be '
                          'visible and updated when document data changes.',
                          verbose_name='Enabled'
                      )
                  ),
                  (
                      'document_types',
                      models.ManyToManyField(
                          to='documents.DocumentType',
                          verbose_name='Document types'
                      )
                  ),
              ],
              options={
                  'verbose_name': 'Index',
                  'verbose_name_plural': 'Indexes',
              },
              bases=(models.Model,),
          ),
          migrations.CreateModel(
              name='IndexInstanceNode',
              fields=[
                  (
                      'id', models.AutoField(
                          verbose_name='ID', serialize=False, auto_created=True,
                          primary_key=True
                      )
                  ),
                  (
                      'value', models.CharField(
                          max_length=128, verbose_name='Value', blank=True
                      )
                  ),
                  (
                      'lft', models.PositiveIntegerField(
                          editable=False, db_index=True
                      )
                  ),
                  (
                      'rght', models.PositiveIntegerField(
                          editable=False, db_index=True
                      )
                  ),
                  (
                      'tree_id', models.PositiveIntegerField(
                          editable=False, db_index=True
                      )
                  ),
                  (
                      'level', models.PositiveIntegerField(
                          editable=False, db_index=True
                      )
                  ),
                  (
                      'documents', models.ManyToManyField(
                          related_name='node_instances',
                          verbose_name='Documents', to='documents.Document'
                      )
                  ),
              ],
              options={
                  'verbose_name': 'Index node instance',
                  'verbose_name_plural': 'Indexes node instances',
              },
              bases=(models.Model,),
          ),
          migrations.CreateModel(
              name='IndexTemplateNode',
              fields=[
                  (
                      'id', models.AutoField(
                          verbose_name='ID', serialize=False, auto_created=True,
                          primary_key=True
                      )
                  ),
                  (
                      'expression', models.CharField(
                          help_text='Enter a python string expression to be '
                          'evaluated.', max_length=128,
                          verbose_name='Indexing expression'
                      )
                  ),
                  (
                      'enabled', models.BooleanField(
                          default=True, help_text='Causes this node to be '
                          'visible and updated when document data changes.',
                          verbose_name='Enabled'
                      )
                  ),
                  (
                      'link_documents', models.BooleanField(
                          default=False, help_text='Check this option to have '
                          'this node act as a container for documents and not '
                          'as a parent for further nodes.',
                          verbose_name='Link documents'
                      )
                  ),
                  (
                      'lft', models.PositiveIntegerField(
                          editable=False, db_index=True
                      )
                  ),
                  (
                      'rght', models.PositiveIntegerField(
                          editable=False, db_index=True
                      )
                  ),
                  (
                      'tree_id', models.PositiveIntegerField(
                          editable=False, db_index=True
                      )
                  ),
                  (
                      'level', models.PositiveIntegerField(
                          editable=False, db_index=True
                      )
                  ),
                  (
                      'index', models.ForeignKey(
                          on_delete=models.CASCADE,
                          related_name='node_templates',
                          to='document_indexing.Index', verbose_name='Index'
                      )
                  ),
                  (
                      'parent', mptt.fields.TreeForeignKey(
                          blank=True, null=True, on_delete=models.CASCADE,
                          to='document_indexing.IndexTemplateNode'
                      )
                  ),
              ],
              options={
                  'verbose_name': 'Index node template',
                  'verbose_name_plural': 'Indexes node template',
              },
              bases=(models.Model,),
          ),
          migrations.AddField(
              model_name='indexinstancenode',
              name='index_template_node',
              field=models.ForeignKey(
                  on_delete=models.CASCADE, related_name='node_instance',
                  to='document_indexing.IndexTemplateNode',
                  verbose_name='Index template node'
              ),
              preserve_default=True,
          ),
          migrations.AddField(
              model_name='indexinstancenode',
              name='parent',
              field=mptt.fields.TreeForeignKey(
                  blank=True, null=True, on_delete=models.CASCADE,
                  to='document_indexing.IndexInstanceNode'
              ),
              preserve_default=True,
          ),
      ]
  