summaryrefslogtreecommitdiff
path: root/ishtar_common/migrations/0217_auto_20220328_1222.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/migrations/0217_auto_20220328_1222.py')
-rw-r--r--ishtar_common/migrations/0217_auto_20220328_1222.py477
1 files changed, 477 insertions, 0 deletions
diff --git a/ishtar_common/migrations/0217_auto_20220328_1222.py b/ishtar_common/migrations/0217_auto_20220328_1222.py
new file mode 100644
index 000000000..68135361d
--- /dev/null
+++ b/ishtar_common/migrations/0217_auto_20220328_1222.py
@@ -0,0 +1,477 @@
+# Generated by Django 2.2.24 on 2022-03-28 12:22
+
+from django.conf import settings
+import django.contrib.gis.db.models.fields
+import django.contrib.postgres.fields
+import django.contrib.postgres.fields.jsonb
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+import ishtar_common.models_common
+import re
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('auth', '0011_update_proxy_permissions'),
+ ('contenttypes', '0002_remove_content_type_name'),
+ ('ishtar_common', '0216_auto_20210805_1703'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ApiExternalSource',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('url', models.URLField(verbose_name='URL')),
+ ('name', models.CharField(max_length=200, verbose_name='Name')),
+ ('key', models.CharField(max_length=40, verbose_name='Key')),
+ ('match_document', models.FileField(blank=True, help_text='First use the "Update types from source" action. Then use the action "Generate match document" action to create a default match document. Complete it and attach it back to the source to finally use the action "Update association from match document".', null=True, upload_to='', verbose_name='Match document')),
+ ('users', models.ManyToManyField(blank=True, to='ishtar_common.IshtarUser')),
+ ],
+ options={
+ 'verbose_name': 'API - Search - External source',
+ 'verbose_name_plural': 'API - Search - External sources',
+ 'ordering': ('name',),
+ },
+ ),
+ migrations.CreateModel(
+ name='ApiSearchModel',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('limit_query', models.TextField(blank=True, help_text='Search query add to each request', null=True, verbose_name='Limit query')),
+ ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
+ ],
+ options={
+ 'verbose_name': 'API - Remote access - Search model',
+ 'verbose_name_plural': 'API - Remote access - Search models',
+ },
+ ),
+ migrations.CreateModel(
+ name='ApiUser',
+ fields=[
+ ('user_ptr', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='apiuser', serialize=False, to=settings.AUTH_USER_MODEL)),
+ ('ip', models.GenericIPAddressField(verbose_name='IP')),
+ ],
+ options={
+ 'verbose_name': 'API - Remote access - User',
+ 'verbose_name_plural': 'API - Remote access - Users',
+ },
+ ),
+ migrations.CreateModel(
+ name='GeoDataType',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('label', models.TextField(verbose_name='Label')),
+ ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')),
+ ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
+ ('available', models.BooleanField(default=True, verbose_name='Available')),
+ ('order', models.IntegerField(default=10, verbose_name='Order')),
+ ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.GeoDataType', verbose_name='Parent')),
+ ],
+ options={
+ 'verbose_name': 'Geographic - Data type',
+ 'verbose_name_plural': 'Geographic - Data types',
+ 'ordering': ('order', 'label'),
+ },
+ bases=(ishtar_common.models_common.Cached, models.Model),
+ ),
+ migrations.CreateModel(
+ name='GeoOriginType',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('label', models.TextField(verbose_name='Label')),
+ ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')),
+ ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
+ ('available', models.BooleanField(default=True, verbose_name='Available')),
+ ('order', models.IntegerField(default=10, verbose_name='Order')),
+ ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.GeoOriginType', verbose_name='Parent')),
+ ],
+ options={
+ 'verbose_name': 'Geographic - Origin type',
+ 'verbose_name_plural': 'Geographic - Origin types',
+ 'ordering': ('order', 'label'),
+ },
+ bases=(ishtar_common.models_common.Cached, models.Model),
+ ),
+ migrations.CreateModel(
+ name='GeoProviderType',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('label', models.TextField(verbose_name='Label')),
+ ('txt_idx', models.TextField(help_text='The slug is the standardized version of the name. It contains only lowercase letters, numbers and hyphens. Each slug must be unique.', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[-a-zA-Z0-9_]+\\Z'), "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.", 'invalid')], verbose_name='Textual ID')),
+ ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
+ ('available', models.BooleanField(default=True, verbose_name='Available')),
+ ('order', models.IntegerField(default=10, verbose_name='Order')),
+ ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.GeoProviderType', verbose_name='Parent')),
+ ],
+ options={
+ 'verbose_name': 'Geographic - Provider type',
+ 'verbose_name_plural': 'Geographic - Provider types',
+ 'ordering': ('order', 'label'),
+ },
+ bases=(ishtar_common.models_common.Cached, models.Model),
+ ),
+ migrations.AlterModelOptions(
+ name='area',
+ options={'ordering': ('label',), 'verbose_name': 'Town - Area', 'verbose_name_plural': 'Town - Areas'},
+ ),
+ migrations.AlterModelOptions(
+ name='person',
+ options={'ordering': ['name', 'surname'], 'permissions': (('view_own_person', 'Can view own Person'), ('add_own_person', 'Can add own Person'), ('change_own_person', 'Can change own Person'), ('delete_own_person', 'Can delete own Person')), 'verbose_name': 'Person', 'verbose_name_plural': 'Persons'},
+ ),
+ migrations.AlterModelOptions(
+ name='spatialreferencesystem',
+ options={'ordering': ('order', 'label'), 'verbose_name': 'Spatial reference system', 'verbose_name_plural': 'Spatial reference systems'},
+ ),
+ migrations.AddField(
+ model_name='importertype',
+ name='is_main_geometry',
+ field=models.BooleanField(default=True, help_text='Only relevant for GIS files', verbose_name='Set to main geometry'),
+ ),
+ migrations.AddField(
+ model_name='importertype',
+ name='layer_name',
+ field=models.CharField(blank=True, help_text='For GIS file with multiple layers', max_length=200, null=True, verbose_name='Layer name'),
+ ),
+ migrations.AddField(
+ model_name='importertype',
+ name='type',
+ field=models.CharField(choices=[('tab', 'Table'), ('gis', 'GIS')], default='tab', max_length=3, verbose_name='Type'),
+ ),
+ migrations.AlterField(
+ model_name='area',
+ name='reference',
+ field=models.TextField(blank=True, default='', verbose_name='Reference'),
+ ),
+ migrations.AlterField(
+ model_name='author',
+ name='author_type',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='ishtar_common.AuthorType', verbose_name='Author type'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='data',
+ field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='history_m2m',
+ field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='language',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Language', verbose_name='Language'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='last_modified',
+ field=models.DateTimeField(),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='publisher',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='publish', to='ishtar_common.Organization', verbose_name='Publisher'),
+ ),
+ migrations.AlterField(
+ model_name='document',
+ name='source',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='ishtar_common.Document', verbose_name='Source'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='data',
+ field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='history_m2m',
+ field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='last_modified',
+ field=models.DateTimeField(),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='mobile_phone',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Mobile phone'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='phone',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='phone2',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone description 2'),
+ ),
+ migrations.AlterField(
+ model_name='historicalorganization',
+ name='phone3',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='data',
+ field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='history_m2m',
+ field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='last_modified',
+ field=models.DateTimeField(),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='mobile_phone',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Mobile phone'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='phone',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='phone2',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone description 2'),
+ ),
+ migrations.AlterField(
+ model_name='historicalperson',
+ name='phone3',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='default_language',
+ field=models.ForeignKey(blank=True, help_text='If set, by default the selected language will be set for localized documents.', null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Language', verbose_name='Default language for documentation'),
+ ),
+ migrations.AlterField(
+ model_name='ishtarsiteprofile',
+ name='display_srs',
+ field=models.ForeignKey(blank=True, help_text='Spatial Reference System used for display when no SRS is defined', null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.SpatialReferenceSystem', verbose_name='Spatial Reference System for display'),
+ ),
+ migrations.AlterField(
+ model_name='itemkey',
+ name='group',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.TargetKeyGroup'),
+ ),
+ migrations.AlterField(
+ model_name='itemkey',
+ name='importer',
+ field=models.ForeignKey(blank=True, help_text='Specific key to an import', null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Import'),
+ ),
+ migrations.AlterField(
+ model_name='itemkey',
+ name='user',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.IshtarUser'),
+ ),
+ migrations.AlterField(
+ model_name='jsondatafield',
+ name='value_type',
+ field=models.CharField(choices=[('T', 'Text'), ('LT', 'Long text'), ('I', 'Integer'), ('B', 'Boolean'), ('F', 'Float'), ('D', 'Date'), ('C', 'Choices'), ('MC', 'Multi-choices')], default='T', max_length=10, verbose_name='Type'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='data',
+ field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='history_m2m',
+ field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='last_modified',
+ field=models.DateTimeField(),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='mobile_phone',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Mobile phone'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='organization_type',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='ishtar_common.OrganizationType', verbose_name='Type'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='phone',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='phone2',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone description 2'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='phone3',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='organization',
+ name='precise_town',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Town', verbose_name='Town (precise)'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='data',
+ field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='history_m2m',
+ field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='last_modified',
+ field=models.DateTimeField(),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='mobile_phone',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Mobile phone'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='phone',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='phone2',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone description 2'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='phone3',
+ field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Phone 3'),
+ ),
+ migrations.AlterField(
+ model_name='person',
+ name='precise_town',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Town', verbose_name='Town (precise)'),
+ ),
+ migrations.AlterField(
+ model_name='statscache',
+ name='values',
+ field=django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=dict),
+ ),
+ migrations.AlterField(
+ model_name='targetkey',
+ name='associated_group',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.TargetKeyGroup'),
+ ),
+ migrations.AlterField(
+ model_name='targetkey',
+ name='associated_import',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.Import'),
+ ),
+ migrations.AlterField(
+ model_name='targetkey',
+ name='associated_user',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='ishtar_common.IshtarUser'),
+ ),
+ migrations.AlterField(
+ model_name='userprofile',
+ name='profile_type',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='ishtar_common.ProfileType', verbose_name='Profile type'),
+ ),
+ migrations.CreateModel(
+ name='GeoVectorData',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.TextField(default='Default', verbose_name='Name')),
+ ('source_id', models.PositiveIntegerField()),
+ ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
+ ('x', models.FloatField(blank=True, help_text='User input', null=True, verbose_name='X')),
+ ('y', models.FloatField(blank=True, help_text='User input', null=True, verbose_name='Y')),
+ ('z', models.FloatField(blank=True, help_text='User input', null=True, verbose_name='Z')),
+ ('cached_x', models.FloatField(blank=True, null=True, verbose_name='X (cached)')),
+ ('cached_y', models.FloatField(blank=True, null=True, verbose_name='Y (cached)')),
+ ('cached_z', models.FloatField(blank=True, null=True, verbose_name='Z (cached)')),
+ ('estimated_error_x', models.FloatField(blank=True, null=True, verbose_name='Estimated error for X')),
+ ('estimated_error_y', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Y')),
+ ('estimated_error_z', models.FloatField(blank=True, null=True, verbose_name='Estimated error for Z')),
+ ('point_2d', django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326, verbose_name='Point (2D)')),
+ ('point_3d', django.contrib.gis.db.models.fields.PointField(blank=True, dim=3, null=True, srid=4326, verbose_name='Point (3D)')),
+ ('multi_points', django.contrib.gis.db.models.fields.MultiPointField(blank=True, null=True, srid=4326, verbose_name='Multi points')),
+ ('multi_line', django.contrib.gis.db.models.fields.MultiLineStringField(blank=True, null=True, srid=4326, verbose_name='Multi line')),
+ ('multi_polygon', django.contrib.gis.db.models.fields.MultiPolygonField(blank=True, null=True, srid=4326, verbose_name='Multi polygon')),
+ ('need_update', models.BooleanField(default=False, verbose_name='Need update')),
+ ('data_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='ishtar_common.GeoDataType', verbose_name='Data type')),
+ ('origin', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='ishtar_common.GeoOriginType', verbose_name='Origin')),
+ ('provider', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='ishtar_common.GeoProviderType', verbose_name='Provider')),
+ ('source_content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='content_type_geovectordata', to='contenttypes.ContentType')),
+ ('spatial_reference_system', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='ishtar_common.SpatialReferenceSystem', verbose_name='Spatial Reference System')),
+ ],
+ options={
+ 'verbose_name': 'Geographic - Vector data',
+ 'verbose_name_plural': 'Geographic - Vector data',
+ },
+ ),
+ migrations.CreateModel(
+ name='ApiSheetFilter',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('key', models.CharField(max_length=200, verbose_name='Key')),
+ ('api_search_model', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sheet_filters', to='ishtar_common.ApiSearchModel')),
+ ],
+ options={
+ 'verbose_name': 'API - Remote access - Sheet filter',
+ 'verbose_name_plural': 'API - Remote access - Sheet filters',
+ },
+ ),
+ migrations.AddField(
+ model_name='apisearchmodel',
+ name='user',
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.ApiUser'),
+ ),
+ migrations.CreateModel(
+ name='ApiKeyMatch',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('search_keys', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=200), blank=True, size=None, verbose_name='Search keys')),
+ ('distant_slug', models.SlugField(allow_unicode=True, max_length=200, verbose_name='Distant key')),
+ ('distant_label', models.TextField(blank=True, default='', verbose_name='Distant value')),
+ ('local_slug', models.SlugField(allow_unicode=True, max_length=200, verbose_name='Local key')),
+ ('local_label', models.TextField(blank=True, default='', verbose_name='Local value')),
+ ('do_not_match', models.BooleanField(default=False, verbose_name='Disable match for this search')),
+ ('associated_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='key_match_types', to='contenttypes.ContentType', verbose_name='Associated type')),
+ ('search_model', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='key_match_search_models', to='contenttypes.ContentType', verbose_name='Search model')),
+ ('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ishtar_common.ApiExternalSource')),
+ ],
+ options={
+ 'verbose_name': 'API - Search - Key match',
+ 'verbose_name_plural': 'API - Search - Keys matches',
+ },
+ ),
+ migrations.AddField(
+ model_name='town',
+ name='geodata',
+ field=models.ManyToManyField(blank=True, related_name='related_items_ishtar_common_town', to='ishtar_common.GeoVectorData'),
+ ),
+ migrations.AddField(
+ model_name='town',
+ name='main_geodata',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='main_related_items_ishtar_common_town', to='ishtar_common.GeoVectorData'),
+ ),
+ migrations.AddField(
+ model_name='userprofile',
+ name='external_sources',
+ field=models.ManyToManyField(blank=True, related_name='profiles', to='ishtar_common.ApiExternalSource'),
+ ),
+ ]