class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='Organisation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True)), ('name', models.CharField(max_length=512)), ('title', models.CharField(default='Organisation', help_text='The title of your organisation will be shown on the landing page. max. 100 characters', max_length=100, verbose_name='Title of your organisation')), ('description', models.CharField(help_text='The description will be displayed on the landing page. max. 400 characters', max_length=400, verbose_name='Short description of your organisation')), ('logo', adhocracy4.images.fields.ConfiguredImageField('logo', blank=True, help_text='The Logo representing your organisation. The image must be square and it should be min. 200 pixels wide and 200 pixels tall. Allowed file formats are png, jpeg, gif. The file size should be max. 5 MB.', upload_to='organisations/logos', verbose_name='Logo')), ('slogan', models.CharField(blank=True, help_text='The slogan will be shown below the title of your organisation on the landing page. The slogan can provide context or additional information to the title. max. 200 characters', max_length=200, verbose_name='Slogan')), ('image', adhocracy4.images.fields.ConfiguredImageField('heroimage', blank=True, help_prefix='The image will be shown as a decorative background image.', upload_to='organisations/backgrounds', verbose_name='Header image')), ('information', ckeditor_uploader.fields.RichTextUploadingField(blank=True, help_text='You can provide general information about your participation platform to your visitors. It’s also helpful to name a general person of contact for inquiries. The information will be shown on a separate page that can be reached via the main menu.', verbose_name='Information about your organisation')), ('imprint', ckeditor.fields.RichTextField(help_text='Please provide all the legally required information of your imprint. The imprint will be shown on a separate page.', verbose_name='Imprint')), ('is_supporting', models.BooleanField(default=False, help_text='For supporting organisations, the banner asking for donations is not displayed on their pages.', verbose_name='is a supporting organisation')), ('initiators', models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL)), ], bases=(parler.models.TranslatableModelMixin, models.Model), ), ]
class Migration(migrations.Migration): dependencies = [ ('core', '0007_auto_20171004_1133'), ('course_metadata', '0070_auto_20171127_1057'), ] operations = [ migrations.CreateModel( name='Topic', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, verbose_name='UUID')), ('banner_image_url', models.URLField(blank=True, null=True)), ('slug', django_extensions.db.fields.AutoSlugField(blank=True, editable=False, help_text='Leave this field blank to have the value generated automatically.', populate_from='name')), ('partner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Partner')), ], bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='TopicTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('name', models.CharField(max_length=255)), ('subtitle', models.CharField(blank=True, max_length=255, null=True)), ('description', models.TextField(blank=True, null=True)), ('long_description', models.TextField(blank=True, null=True)), ('master', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='course_metadata.Topic')), ], options={ 'verbose_name': 'Topic model translations', }, ), migrations.AlterUniqueTogether( name='topictranslation', unique_together=set([('language_code', 'master')]), ), migrations.AlterUniqueTogether( name='topic', unique_together=set([('partner', 'uuid'), ('partner', 'slug')]), ), ]
class Migration(migrations.Migration): initial = True dependencies = [] operations = [ migrations.CreateModel( name="NotificationTemplate", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "type", models.CharField(max_length=50, unique=True, verbose_name="type"), ), ], options={ "verbose_name": "notification", "verbose_name_plural": "notifications", }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name="NotificationTemplateTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField( db_index=True, max_length=15, verbose_name="Language" ), ), ("subject", models.CharField(max_length=255, verbose_name="subject")), ( "body_html", models.TextField(blank=True, verbose_name="body, HTML version"), ), ( "body_text", models.TextField( blank=True, help_text="If left blank, the HTML version without HTML tags will be used.", verbose_name="body, plain text version", ), ), ( "master", models.ForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="django_ilmoitin.NotificationTemplate", ), ), ], options={ "verbose_name": "notification Translation", "db_table": "django_ilmoitin_notificationtemplate_translation", "db_tablespace": "", "managed": True, "default_permissions": (), }, ), migrations.AlterUniqueTogether( name="notificationtemplatetranslation", unique_together={("language_code", "master")}, ), ]
class Migration(migrations.Migration): dependencies = [ ('shuup', '0051_supplier_enabled'), ] operations = [ migrations.CreateModel( name='Label', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('identifier', shuup.core.fields.InternalIdentifierField(blank=True, editable=False, max_length=128, null=True, unique=True)), ('created_on', models.DateTimeField(auto_now_add=True, verbose_name='created on')), ('modified_on', models.DateTimeField(auto_now=True, db_index=True, verbose_name='modified on')), ], options={ 'verbose_name': 'label', 'verbose_name_plural': 'labels', }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='LabelTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('name', models.CharField(max_length=64, verbose_name='name')), ('master', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='shuup.Label')), ], options={ 'verbose_name': 'label Translation', 'db_table': 'shuup_label_translation', 'db_tablespace': '', 'managed': True, 'default_permissions': (), }, ), migrations.AddField( model_name='shoptranslation', name='description', field=models.TextField( blank=True, help_text= 'To make your shop stand out, give it an awesome description. This is what will help your shoppers learn about your shop. It will also help shoppers find your store from the web.', verbose_name='description'), ), migrations.AddField( model_name='shoptranslation', name='short_description', field=models.CharField( blank=True, help_text= 'Enter a short description for your shop. The short description will be used to get the attention of your customer with a small but precise description of your shop.', max_length=150, verbose_name='short description'), ), migrations.AddField( model_name='paymentmethod', name='labels', field=models.ManyToManyField(blank=True, to='shuup.Label', verbose_name='labels'), ), migrations.AddField( model_name='shippingmethod', name='labels', field=models.ManyToManyField(blank=True, to='shuup.Label', verbose_name='labels'), ), migrations.AddField( model_name='shop', name='labels', field=models.ManyToManyField(blank=True, related_name='shops', to='shuup.Label', verbose_name='labels'), ), migrations.AlterUniqueTogether( name='labeltranslation', unique_together=set([('language_code', 'master')]), ), ]
class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='Page', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('available_from', models.DateTimeField(blank=True, verbose_name='available from', null=True)), ('available_to', models.DateTimeField(blank=True, verbose_name='available to', null=True)), ('created_on', models.DateTimeField(verbose_name='created on', auto_now_add=True)), ('modified_on', models.DateTimeField(verbose_name='modified on', auto_now=True)), ('identifier', shuup.core.fields.InternalIdentifierField(max_length=64, null=True, unique=True, editable=False, blank=True)), ('visible_in_menu', models.BooleanField(verbose_name='visible in menu', default=False)), ('list_children_on_page', models.BooleanField(verbose_name='list children on page', default=False)), ('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)), ('created_by', models.ForeignKey( blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, null=True, verbose_name='created by')), ('modified_by', models.ForeignKey( blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, null=True, verbose_name='modified by')), ('parent', mptt.fields.TreeForeignKey(blank=True, on_delete=models.CASCADE, related_name='children', to='shuup_simple_cms.Page', null=True, verbose_name='parent')), ], options={ 'verbose_name': 'page', 'ordering': ('-id', ), 'verbose_name_plural': 'pages', }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='PageTranslation', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('title', models.CharField(max_length=256, verbose_name='title')), ('url', models.CharField(default=None, null=True, unique=True, verbose_name='URL', blank=True, max_length=100)), ('content', models.TextField(verbose_name='content')), ('master', models.ForeignKey(on_delete=models.CASCADE, related_name='translations', to='shuup_simple_cms.Page', null=True, editable=False)), ], options={ 'db_tablespace': '', 'default_permissions': (), 'verbose_name': 'page Translation', 'managed': True, 'db_table': 'shuup_simple_cms_page_translation', }, ), migrations.AlterUniqueTogether( name='pagetranslation', unique_together=set([('language_code', 'master')]), ), ]
class Migration(migrations.Migration): dependencies = [("services", "0008_servicetranslation")] operations = [ migrations.CreateModel( name="AllowedDataField", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("field_name", models.CharField(max_length=30)), ( "order", models.PositiveIntegerField( db_index=True, default=services.models.get_next_data_field_order, editable=False, ), ), ], options={"ordering": ["order"]}, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.AddField( model_name="service", name="allowed_data_fields", field=models.ManyToManyField(to="services.AllowedDataField"), ), migrations.CreateModel( name="AllowedDataFieldTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language"), ), ("label", models.CharField(max_length=64)), ( "master", models.ForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="services.AllowedDataField", ), ), ], options={ "verbose_name": "allowed data field Translation", "db_table": "services_alloweddatafield_translation", "db_tablespace": "", "managed": True, "default_permissions": (), "unique_together": {("language_code", "master")}, }, ), ]
class Migration(migrations.Migration): replaces = [ ('carousel', '0001_initial'), ('carousel', '0002_alter_names'), ] dependencies = [ ('filer', '0002_auto_20150606_2003'), ('E-Commerce_simple_cms', '0001_initial'), ('E-Commerce', '0001_squashed_0039_alter_names'), ] operations = [ migrations.CreateModel( name='Carousel', fields=[ ('id', models.AutoField( serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('name', models.CharField( max_length=50, verbose_name='name', help_text='Name is only used to configure carousels.')), ('animation', enumfields.fields.EnumIntegerField( default=0, verbose_name='animation', help_text='Animation type for cycling slides.', enum=E-Commerce.front.apps.carousel.models.CarouselMode)), ('interval', models.IntegerField( default=5, verbose_name='interval', help_text='Slide interval in seconds.')), ('pause_on_hover', models.BooleanField( default=True, verbose_name='pause on hover', help_text=( 'Pauses the cycling of the carousel on mouse over.'))), ('is_arrows_visible', models.BooleanField( default=True, verbose_name='show navigation arrows')), ('use_dot_navigation', models.BooleanField( default=True, verbose_name='show navigation dots')), ('image_width', models.IntegerField( default=1200, verbose_name='image width', help_text='Slide images will be cropped to this width.')), ('image_height', models.IntegerField( default=600, verbose_name='image height', help_text='Slide images will be cropped to this height.')), ], options={ 'verbose_name_plural': 'Carousels', 'verbose_name': 'Carousel', }), migrations.CreateModel( name='Slide', fields=[ ('id', models.AutoField( serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('name', models.CharField( null=True, max_length=50, verbose_name='name', help_text='Name is only used to configure slides.', blank=True)), ('ordering', models.IntegerField( null=True, default=0, verbose_name='ordering', blank=True)), ('target', enumfields.fields.EnumIntegerField( default=0, verbose_name='link target', enum=E-Commerce.front.apps.carousel.models.LinkTargetType)), ('available_from', models.DateTimeField( null=True, verbose_name='available from', blank=True)), ('available_to', models.DateTimeField( null=True, verbose_name='available to', blank=True)), ('carousel', models.ForeignKey( related_name='slides', to='carousel.Carousel')), ('category_link', models.ForeignKey( null=True, verbose_name='category link', related_name='+', to='E-Commerce.Category', blank=True)), ('cms_page_link', models.ForeignKey( null=True, verbose_name='cms page link', related_name='+', to='E-Commerce_simple_cms.Page', blank=True)), ('product_link', models.ForeignKey( null=True, verbose_name='product link', related_name='+', to='E-Commerce.Product', blank=True)), ], options={ 'verbose_name_plural': 'Slides', 'verbose_name': 'Slide', 'ordering': ('ordering', 'id'), }, bases=(parler.models.TranslatableModelMixin, models.Model)), migrations.CreateModel( name='SlideTranslation', fields=[ ('id', models.AutoField( serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('language_code', models.CharField( max_length=15, verbose_name='Language', db_index=True)), ('caption', models.CharField( null=True, max_length=80, verbose_name='caption', blank=True)), ('caption_text', models.TextField( null=True, verbose_name='caption text', help_text=( 'When displayed in banner box mode, ' 'caption text is shown as a tooltip'), blank=True)), ('external_link', models.CharField( null=True, max_length=160, verbose_name='external link', blank=True)), ('image', filer.fields.image.FilerImageField( null=True, verbose_name='image', related_name='+', on_delete=django.db.models.deletion.PROTECT, to='filer.Image', blank=True)), ('master', models.ForeignKey( editable=False, null=True, related_name='translations', to='carousel.Slide')), ], options={ 'db_tablespace': '', 'verbose_name': 'Slide Translation', 'managed': True, 'default_permissions': (), 'db_table': 'carousel_slide_translation', }), migrations.AlterUniqueTogether( name='slidetranslation', unique_together=set([('language_code', 'master')]), ), migrations.AlterField( model_name='carousel', name='is_arrows_visible', field=models.BooleanField( default=True, verbose_name='show navigation arrows', help_text=( 'When checked, navigational arrows are shown on the ' 'carousel allowing for customers to go back and forward.') )), migrations.AlterField( model_name='carousel', name='name', field=models.CharField( max_length=50, verbose_name='name', help_text='The carousel name use for carousel configuration.'), ), migrations.AlterField( model_name='carousel', name='pause_on_hover', field=models.BooleanField( default=True, verbose_name='pause on hover', help_text=( 'When checked, the carousel cycling pauses ' 'on mouse over.'))), migrations.AlterField( model_name='carousel', name='use_dot_navigation', field=models.BooleanField( default=True, verbose_name='show navigation dots', help_text=( 'When checked, navigational indicator dots are shown.') )), migrations.AlterField( model_name='slide', name='available_from', field=models.DateTimeField( null=True, verbose_name='available from', help_text=( 'Set the date and time from which this slide should be ' 'visible in the carousel. This is useful to advertise ' 'sales campaigns or other time-sensitive marketing.'), blank=True)), migrations.AlterField( model_name='slide', name='available_to', field=models.DateTimeField( null=True, verbose_name='available to', help_text=( 'Set the date and time from which this slide should be ' 'visible in the carousel. This is useful to advertise ' 'sales campaigns or other time-sensitive marketing.'), blank=True)), migrations.AlterField( model_name='slide', name='category_link', field=models.ForeignKey( null=True, verbose_name='category link', related_name='+', help_text=( 'Set the product category page that should be shown ' 'when this slide is clicked, if any.'), to='E-Commerce.Category', blank=True)), migrations.AlterField( model_name='slide', name='cms_page_link', field=models.ForeignKey( null=True, verbose_name='cms page link', related_name='+', help_text=( 'Set the web page that should be shown when the slide ' 'is clicked, if any.'), to='E-Commerce_simple_cms.Page', blank=True)), migrations.AlterField( model_name='slide', name='ordering', field=models.IntegerField( null=True, default=0, verbose_name='ordering', help_text=( 'Set the numeric order in which this slide should ' 'appear relative to other slides in this carousel.'), blank=True)), migrations.AlterField( model_name='slide', name='product_link', field=models.ForeignKey( null=True, verbose_name='product link', related_name='+', help_text=( 'Set the product detail page that should be shown ' 'when this slide is clicked, if any.'), to='E-Commerce.Product', blank=True)), migrations.AlterField( model_name='slide', name='target', field=enumfields.fields.EnumIntegerField( default=0, verbose_name='link target', help_text=( 'Set this to current if clicking on this slide ' 'should open a new browser tab.'), enum=E-Commerce.front.apps.carousel.models.LinkTargetType)), migrations.AlterField( model_name='slidetranslation', name='caption', field=models.CharField( null=True, max_length=80, verbose_name='caption', help_text=( 'Text that describes the image. Used for search ' 'engine purposes.'), blank=True)), migrations.AlterField( model_name='slidetranslation', name='external_link', field=models.CharField( null=True, max_length=160, verbose_name='external link', help_text=( 'Set the external site that should be shown when ' 'this slide is clicked, if any.'), blank=True)), migrations.AlterField( model_name='slidetranslation', name='image', field=filer.fields.image.FilerImageField( null=True, verbose_name='image', related_name='+', help_text='The slide image to show.', on_delete=django.db.models.deletion.PROTECT, to='filer.Image', blank=True)), ]
class Migration(migrations.Migration): dependencies = [ ("sites", "0002_alter_domain_unique"), ("api", "0061_no_null_product_on_plantemplate"), ] operations = [ migrations.CreateModel( name="SiteProfile", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("logo", models.ImageField(blank=True, upload_to="")), ( "site", models.OneToOneField( on_delete=django.db.models.deletion.CASCADE, to="sites.Site" ), ), ], options={"abstract": False}, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name="SiteProfileTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField( db_index=True, max_length=15, verbose_name="Language" ), ), ("name", models.CharField(max_length=64)), ( "welcome_text", sfdo_template_helpers.fields.MarkdownField( blank=True, property_suffix="_markdown" ), ), ( "copyright_notice", sfdo_template_helpers.fields.MarkdownField( blank=True, property_suffix="_markdown" ), ), ( "master", models.ForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="api.SiteProfile", ), ), ], options={ "verbose_name": "site profile Translation", "db_table": "api_siteprofile_translation", "db_tablespace": "", "managed": True, "default_permissions": (), }, ), migrations.AlterUniqueTogether( name="siteprofiletranslation", unique_together={("language_code", "master")} ), ]
class Migration(migrations.Migration): initial = True dependencies = [("profiles", "0022_add_newsletter_options")] operations = [ migrations.CreateModel( name="SubscriptionTypeCategory", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("code", models.CharField(max_length=32)), ("created_at", models.DateTimeField(auto_now_add=True)), ( "order", models.PositiveIntegerField( db_index=True, default=1, editable=False, ), ), ], options={"abstract": False, "ordering": ["order"]}, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name="SubscriptionType", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("code", models.CharField(max_length=32)), ("created_at", models.DateTimeField(auto_now_add=True)), ( "order", models.PositiveIntegerField( db_index=True, default=1, editable=False, ), ), ( "subscription_type_category", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="subscription_types", to="subscriptions.SubscriptionTypeCategory", ), ), ], options={"abstract": False, "ordering": ["order"]}, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name="Subscription", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("created_at", models.DateTimeField(auto_now_add=True)), ("enabled", models.BooleanField(default=True)), ( "profile", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="subscriptions", to="profiles.Profile", ), ), ( "subscription_type", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="subscriptions", to="subscriptions.SubscriptionType", ), ), ], ), migrations.CreateModel( name="SubscriptionTypeTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField( db_index=True, max_length=15, verbose_name="Language" ), ), ("label", models.CharField(max_length=255)), ( "master", models.ForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="subscriptions.SubscriptionType", ), ), ], options={ "verbose_name": "subscription type Translation", "db_table": "subscriptions_subscriptiontype_translation", "db_tablespace": "", "managed": True, "default_permissions": (), "unique_together": {("language_code", "master")}, }, ), migrations.CreateModel( name="SubscriptionTypeCategoryTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField( db_index=True, max_length=15, verbose_name="Language" ), ), ("label", models.CharField(max_length=255)), ( "master", models.ForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="subscriptions.SubscriptionTypeCategory", ), ), ], options={ "verbose_name": "subscription type category Translation", "db_table": "subscriptions_subscriptiontypecategory_translation", "db_tablespace": "", "managed": True, "default_permissions": (), "unique_together": {("language_code", "master")}, }, ), ]
class Migration(migrations.Migration): dependencies = [ ('shop', '0001_initial'), ] operations = [ migrations.AlterModelOptions( name='category', options={ 'verbose_name': 'category', 'verbose_name_plural': 'categories' }, ), migrations.AlterModelOptions( name='product', options={}, ), migrations.RemoveField( model_name='category', name='name', ), migrations.RemoveField( model_name='category', name='slug', ), migrations.AlterIndexTogether( name='product', index_together=set(), ), migrations.RemoveField( model_name='product', name='description', ), migrations.RemoveField( model_name='product', name='name', ), migrations.RemoveField( model_name='product', name='slug', ), migrations.CreateModel( name='ProductTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('name', models.CharField(db_index=True, max_length=200)), ('slug', models.SlugField(max_length=200)), ('description', models.TextField(blank=True)), ('master', parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='shop.Product')), ], options={ 'verbose_name': 'product Translation', 'db_table': 'shop_product_translation', 'db_tablespace': '', 'managed': True, 'default_permissions': (), 'unique_together': {('language_code', 'master')}, }, bases=(parler.models.TranslatableModel, models.Model), ), migrations.CreateModel( name='CategoryTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('name', models.CharField(db_index=True, max_length=200)), ('slug', models.SlugField(max_length=200, unique=True)), ('master', parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='shop.Category')), ], options={ 'verbose_name': 'category Translation', 'db_table': 'shop_category_translation', 'db_tablespace': '', 'managed': True, 'default_permissions': (), 'unique_together': {('language_code', 'master')}, }, bases=(parler.models.TranslatableModel, models.Model), ), ]
class Migration(migrations.Migration): dependencies = [ ('shuup', '0085_longer_order_line_sku'), ] operations = [ migrations.AddField( model_name='attribute', name='max_choices', field=models.PositiveIntegerField( default=1, help_text= 'Maximum amount of choices that user can choose from existing options. This field has affect only for choices type.', verbose_name='max choices'), ), migrations.AddField( model_name='attribute', name='min_choices', field=models.PositiveIntegerField( default=0, help_text= 'Minimum amount of choices that user can choose from existing options. This field has affect only for choices type.', verbose_name='min choices'), ), migrations.AddField( model_name='attribute', name='ordering', field=models.IntegerField( default=0, help_text= 'The ordering in which your attribute will be displayed.'), ), migrations.CreateModel( name='AttributeChoiceOption', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('attribute', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='choices', to='shuup.Attribute', verbose_name='attribute')), ], options={ 'abstract': False, }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.AddField( model_name='productattribute', name='chosen_options', field=models.ManyToManyField(to='shuup.AttributeChoiceOption', verbose_name='chosen options'), ), migrations.CreateModel( name='AttributeChoiceOptionTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('name', models.CharField( help_text='The attribute choice option name. ', max_length=256, verbose_name='name')), ('master', parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='shuup.AttributeChoiceOption')), ], options={ 'verbose_name': 'attribute choice option Translation', 'db_table': 'shuup_attributechoiceoption_translation', 'db_tablespace': '', 'managed': True, 'default_permissions': (), 'unique_together': {('language_code', 'master')}, }, bases=(parler.models.TranslatedFieldsModelMixin, models.Model), ), ]
class Migration(migrations.Migration): dependencies = [ migrations.swappable_dependency(settings.FILER_IMAGE_MODEL), ('shuup_simple_cms', '0010_add_render_title_and_template_name'), ] operations = [ migrations.CreateModel( name='PageOpenGraph', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('og_type', enumfields.fields.EnumField( default='website', enum=shuup.simple_cms.models.PageOpenGraphType, max_length=10, verbose_name='type')), ('image', filer.fields.image.FilerImageField( blank=True, help_text='The image of your object.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blog_meta_image', to=settings.FILER_IMAGE_MODEL, verbose_name='Image')), ], options={ 'abstract': False, }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='PageOpenGraphTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('title', models.CharField( blank=True, help_text= 'The title of your object as it should appear within the graph, e.g. The Rock.', max_length=100, verbose_name='Title')), ('description', models.TextField( blank=True, help_text= 'A one to two sentence description of your object.', max_length=160, verbose_name='Description')), ('section', models.CharField( blank=True, help_text= 'A high-level section name, e.g. Technology. Only applicable when type is Article.', max_length=256, verbose_name='Section')), ('tags', models.CharField( blank=True, help_text= 'Tag words associated with this article. Only applicable when type is Article.', max_length=256, verbose_name='Tags')), ('article_author', models.CharField( blank=True, help_text= 'The name of the author for the article. Only applicable when type is Article.', max_length=100, verbose_name='Article author')), ('master', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='shuup_simple_cms.PageOpenGraph')), ], options={ 'verbose_name': 'page open graph Translation', 'db_table': 'shuup_simple_cms_pageopengraph_translation', 'db_tablespace': '', 'managed': True, 'default_permissions': (), }, ), migrations.AlterField( model_name='page', name='available_from', field=models.DateTimeField( blank=True, db_index=True, help_text= 'Set an available from date to restrict the page to be available only after a certain date and time. This is useful for pages describing sales campaigns or other time-sensitive pages.', null=True, verbose_name='available from'), ), migrations.AlterField( model_name='page', name='available_to', field=models.DateTimeField( blank=True, db_index=True, help_text= 'Set an available to date to restrict the page to be available only after a certain date and time. This is useful for pages describing sales campaigns or other time-sensitive pages.', null=True, verbose_name='available to'), ), migrations.AddField( model_name='pageopengraph', name='page', field=models.OneToOneField( on_delete=django.db.models.deletion.CASCADE, related_name='open_graph', to='shuup_simple_cms.Page', verbose_name='page'), ), migrations.AlterUniqueTogether( name='pageopengraphtranslation', unique_together=set([('language_code', 'master')]), ), ]
class Migration(migrations.Migration): dependencies = [ ("sites", "0002_alter_domain_unique"), ("api", "0064_user_agreed_to_tos_at"), ] operations = [ migrations.CreateModel( name="SiteProfile", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "site", models.OneToOneField( on_delete=django.db.models.deletion.CASCADE, to="sites.Site"), ), ], options={"abstract": False}, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name="SiteProfileTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language"), ), ("name", models.CharField(max_length=64)), ( "clickthrough_agreement", sfdo_template_helpers.fields.markdown.MarkdownField( blank=True, property_suffix="_markdown"), ), ( "master", parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="api.SiteProfile", ), ), ], options={ "verbose_name": "site profile Translation", "db_table": "api_siteprofile_translation", "db_tablespace": "", "managed": True, "default_permissions": (), "unique_together": {("language_code", "master")}, }, bases=(parler.models.TranslatedFieldsModelMixin, models.Model), ), ]
class Migration(migrations.Migration): dependencies = [ ('a4_candy_organisations', '0013_orga_remove_default_from_title'), ] operations = [ migrations.RenameField( model_name='organisation', old_name='description', new_name='description_untranslated', ), migrations.RenameField( model_name='organisation', old_name='information', new_name='information_untranslated', ), migrations.RenameField( model_name='organisation', old_name='slogan', new_name='slogan_untranslated', ), migrations.CreateModel( name='OrganisationTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('description', models.CharField( blank=True, help_text= 'The description will be displayed on the landing page. max. 800 characters', max_length=800, verbose_name='Short description of your organisation')), ('slogan', models.CharField( blank=True, help_text= 'The slogan will be shown below the title of your organisation on the landing page. The slogan can provide context or additional information to the title. max. 200 characters', max_length=200, verbose_name='Slogan')), ('information', adhocracy4.ckeditor.fields.RichTextCollapsibleUploadingField( blank=True, help_text= 'You can provide general information about your participation platform to your visitors. It’s also helpful to name a general person of contact for inquiries. The information will be shown on a separate "About" page that can be reached via the main menu.', verbose_name='Information about your organisation')), ('master', parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to=settings.A4_ORGANISATIONS_MODEL)), ], options={ 'verbose_name': 'organisation Translation', 'db_table': 'a4_candy_organisations_organisation_translation', 'db_tablespace': '', 'managed': True, 'default_permissions': (), 'unique_together': {('language_code', 'master')}, }, bases=(parler.models.TranslatedFieldsModelMixin, models.Model), ), ]
class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='Category', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('image', models.ImageField(blank=True, null=True, upload_to='blog', verbose_name='Imagen')), ('created', models.DateTimeField(auto_now_add=True, verbose_name='Fecha de creaciĂ³n')), ('updated', models.DateTimeField(auto_now=True, verbose_name='Fecha de ediciĂ³n')), ], options={ 'verbose_name': 'categorĂa', 'verbose_name_plural': 'categorĂas', 'ordering': ['-created'], }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='Post', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('published', models.DateTimeField(default=django.utils.timezone.now, verbose_name='Fecha de publicaciĂ³n')), ('image', models.ImageField(blank=True, null=True, upload_to='blog', verbose_name='Imagen')), ('created', models.DateTimeField(auto_now_add=True, verbose_name='Fecha de creaciĂ³n')), ('updated', models.DateTimeField(auto_now=True, verbose_name='Fecha de ediciĂ³n')), ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Autor')), ('categories', models.ManyToManyField(to='blog.Category', verbose_name='CategorĂas')), ], options={ 'verbose_name': 'entrada', 'verbose_name_plural': 'entradas', 'ordering': ['-created'], }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='PostTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('title', models.CharField(max_length=200, verbose_name='TĂtulo')), ('content', models.TextField(verbose_name='Contenido')), ('master', parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='blog.Post')), ], options={ 'verbose_name': 'entrada Translation', 'db_table': 'blog_post_translation', 'db_tablespace': '', 'managed': True, 'default_permissions': (), 'unique_together': {('language_code', 'master')}, }, bases=(parler.models.TranslatedFieldsModelMixin, models.Model), ), migrations.CreateModel( name='CategoryTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('name', models.CharField(max_length=100, verbose_name='Nombre')), ('master', parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='blog.Category')), ], options={ 'verbose_name': 'categorĂa Translation', 'db_table': 'blog_category_translation', 'db_tablespace': '', 'managed': True, 'default_permissions': (), 'unique_together': {('language_code', 'master')}, }, bases=(parler.models.TranslatedFieldsModelMixin, models.Model), ), ]
class Migration(migrations.Migration): initial = True dependencies = [ ('shuup_simple_cms', '0007_gdpr'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('shuup', '0044_add_media'), ] operations = [ migrations.CreateModel( name='GDPRCookieCategory', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('always_active', models.BooleanField(default=False, verbose_name='always active')), ('cookies', models.TextField( help_text= 'Comma separated list of cookies names, prefix or suffix that will be included in this category, e.g. _ga, mysession, user_c_', verbose_name='cookies used')), ('shop', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='gdpr_cookie_categories', to='shuup.Shop')), ], options={ 'verbose_name': 'gdpr cookie category', 'verbose_name_plural': 'gdpr cookie categories', }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='GDPRCookieCategoryTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('name', models.CharField(max_length=64, verbose_name='name')), ('how_is_used', models.TextField( blank=True, help_text= 'Describe the purpose of this category of cookies and how it is used.', verbose_name='how we use')), ('master', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='shuup_gdpr.GDPRCookieCategory')), ], options={ 'db_tablespace': '', 'default_permissions': (), 'verbose_name': 'gdpr cookie category Translation', 'managed': True, 'db_table': 'shuup_gdpr_gdprcookiecategory_translation', }, ), migrations.CreateModel( name='GDPRSettings', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('enabled', models.BooleanField(default=False, help_text='Define if the GDPR is active.', verbose_name='enabled')), ('shop', models.OneToOneField( on_delete=django.db.models.deletion.CASCADE, related_name='gdpr_settings', to='shuup.Shop')), ], options={ 'verbose_name': 'gdpr settings', 'verbose_name_plural': 'gdpr settings', }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='GDPRSettingsTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('cookie_banner_content', models.TextField( blank=True, help_text= 'The text to be presented to users in a pop-up warning.', verbose_name='cookie banner content')), ('cookie_privacy_excerpt', models.TextField( blank=True, help_text= 'The summary text to be presented about cookie privacy.', verbose_name='cookie privacy excerpt')), ('master', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='shuup_gdpr.GDPRSettings')), ], options={ 'db_tablespace': '', 'default_permissions': (), 'verbose_name': 'gdpr settings Translation', 'managed': True, 'db_table': 'shuup_gdpr_gdprsettings_translation', }, ), migrations.CreateModel( name='GDPRUserConsent', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created_on', models.DateTimeField(auto_now_add=True, verbose_name='created on', db_index=True)), ('documents', models.ManyToManyField(blank=True, editable=False, to='shuup_simple_cms.Page', verbose_name='consent documents')), ('shop', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='gdpr_consents', to='shuup.Shop')), ('user', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.PROTECT, related_name='gdpr_consents', to=settings.AUTH_USER_MODEL)), ], options={ 'verbose_name': 'gdpr user consent', 'verbose_name_plural': 'gdpr user consents', }, ), migrations.AlterUniqueTogether( name='gdprsettingstranslation', unique_together=set([('language_code', 'master')]), ), migrations.AlterUniqueTogether( name='gdprcookiecategorytranslation', unique_together=set([('language_code', 'master')]), ), ]
class Migration(migrations.Migration): initial = True dependencies = [ ('oidc_provider', '0020_client__post_logout_redirect_uris'), ] operations = [ migrations.CreateModel( name='Api', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField( max_length=50, validators=[ django.core.validators.RegexValidator( '^[a-z0-9]*$', message=('May contain only lower case letters ' 'and digits.')) ], verbose_name='name')), ('required_scopes', multiselectfield.db.fields.MultiSelectField( blank=True, choices=[('email', 'E-mail'), ('profile', 'Profile'), ('address', 'Address'), ('github_username', 'GitHub username')], help_text=('Select the scopes that this API needs ' 'information from. Information from the ' 'selected scopes will be included to the ' 'API Tokens.'), max_length=1000, verbose_name='required scopes')), ], options={ 'verbose_name': 'API', 'verbose_name_plural': 'APIs', }, ), migrations.CreateModel( name='ApiDomain', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('identifier', models.CharField(help_text=( 'API domain identifier, e.g. https://api.hel.fi/auth'), max_length=50, unique=True, verbose_name='identifier')), ], options={ 'verbose_name': 'API domain', 'verbose_name_plural': 'API domains', }, ), migrations.CreateModel( name='ApiScope', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('identifier', models.CharField( editable=False, help_text= ('The scope identifier as known by the API application ' '(i.e. the Resource Server). Generated automatically ' 'from the API identifier and the scope specifier.'), max_length=150, unique=True, verbose_name='identifier')), ('specifier', models.CharField( blank=True, help_text=( 'If there is a need for multiple scopes per API, ' 'this can specify what kind of scope this is about, ' 'e.g. "readonly". For general API scope just leave ' 'this empty.'), max_length=30, validators=[ django.core.validators.RegexValidator( '^[a-z0-9]*$', message=('May contain only lower case letters ' 'and digits.')) ], verbose_name='specifier')), ('allowed_apps', models.ManyToManyField(help_text=( 'Select client applications which are allowed to ' 'get access to this API scope.'), related_name='granted_api_scopes', to='oidc_provider.Client', verbose_name='allowed applications')), ('api', models.ForeignKey(help_text='The API that this scope is for.', on_delete=django.db.models.deletion.CASCADE, related_name='scopes', to='oidc_apis.Api', verbose_name='API')), ], options={ 'verbose_name': 'API scope', 'verbose_name_plural': 'API scopes', }, bases=(AutoFilledIdentifier, ImmutableFields, parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='ApiScopeTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('name', models.CharField(max_length=200, verbose_name='name')), ('description', models.CharField(max_length=1000, verbose_name='description')), ('master', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='oidc_apis.ApiScope', verbose_name='API scope')), ], options={ 'verbose_name': 'API scope translation', 'verbose_name_plural': 'API scope translations', }, ), migrations.AddField( model_name='api', name='domain', field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, to='oidc_apis.ApiDomain', verbose_name='domain'), ), migrations.AddField( model_name='api', name='oidc_client', field=models.OneToOneField( on_delete=django.db.models.deletion.CASCADE, related_name='+', to='oidc_provider.Client', verbose_name='OIDC client'), ), migrations.AlterUniqueTogether( name='apiscopetranslation', unique_together=set([('language_code', 'master')]), ), migrations.AlterUniqueTogether( name='apiscope', unique_together=set([('api', 'specifier')]), ), migrations.AlterUniqueTogether( name='api', unique_together=set([('domain', 'name')]), ), ]
class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('shuup', '0045_disable_default_marketing_permission'), ] operations = [ migrations.CreateModel( name='Task', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=60, verbose_name='name')), ('status', enumfields.fields.EnumIntegerField( default=1, enum=shuup.tasks.models.TaskStatus, verbose_name='status')), ('priority', models.PositiveIntegerField(db_index=True, default=0, verbose_name='priority')), ('completed_on', models.DateTimeField(blank=True, null=True, verbose_name='completed on')), ('created_on', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='created on')), ('modified_on', models.DateTimeField(auto_now=True, db_index=True, verbose_name='modified on')), ('assigned_to', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='assigned_tasks', to='shuup.Contact', verbose_name='assigned to')), ('completed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='completed_tasks', to='shuup.Contact', verbose_name='completed by')), ('creator', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='creted_tasks', to='shuup.Contact', verbose_name='creator')), ('shop', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tasks', to='shuup.Shop', verbose_name='shop')), ], ), migrations.CreateModel( name='TaskComment', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('visibility', enumfields.fields.EnumIntegerField( db_index=True, default=1, enum=shuup.tasks.models.TaskCommentVisibility, verbose_name='visibility')), ('body', models.TextField(verbose_name='body')), ('created_on', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='created on')), ('modified_on', models.DateTimeField(auto_now=True, db_index=True, verbose_name='modified on')), ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='task_comments', to='shuup.Contact', verbose_name='author')), ('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='shuup_tasks.Task', verbose_name='task')), ], ), migrations.CreateModel( name='TaskLogEntry', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created_on', models.DateTimeField(auto_now_add=True, verbose_name='created on')), ('message', models.CharField(max_length=256, verbose_name='message')), ('identifier', models.CharField(blank=True, max_length=64, verbose_name='identifier')), ('kind', enumfields.fields.EnumIntegerField( default=0, enum=shuup.utils.analog.LogEntryKind, verbose_name='log entry kind')), ('extra', jsonfield.fields.JSONField(blank=True, null=True, verbose_name='extra data')), ('target', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='log_entries', to='shuup_tasks.Task', verbose_name='target')), ('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='user')), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='TaskType', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('identifier', shuup.core.fields.InternalIdentifierField(blank=True, editable=False, max_length=64, null=True, unique=False)), ('shop', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='task_types', to='shuup.Shop', verbose_name='shop')), ], options={ 'verbose_name': 'task type', 'verbose_name_plural': 'task types', }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='TaskTypeTranslation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('name', models.TextField(verbose_name='name')), ('master', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='translations', to='shuup_tasks.TaskType')), ], options={ 'db_tablespace': '', 'managed': True, 'default_permissions': (), 'verbose_name': 'task type Translation', 'db_table': 'shuup_tasks_tasktype_translation', }, ), migrations.AddField( model_name='task', name='type', field=models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name='tasks', to='shuup_tasks.TaskType', verbose_name='task type'), ), migrations.AlterUniqueTogether( name='tasktypetranslation', unique_together=set([('language_code', 'master')]), ), migrations.AlterUniqueTogether( name='tasktype', unique_together=set([('shop', 'identifier')]), ), ]
class Migration(migrations.Migration): dependencies = [ ('shuup', '0001_initial'), ('contenttypes', '0002_remove_content_type_name'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='BasketCampaign', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('name', models.CharField(max_length=120, help_text='The name for this campaign.', verbose_name='name')), ('identifier', shuup.core.fields.InternalIdentifierField(max_length=64, null=True, unique=True, editable=False, blank=True)), ('active', models.BooleanField(verbose_name='active', default=False)), ('start_datetime', models.DateTimeField(blank=True, verbose_name='start date and time', null=True)), ('end_datetime', models.DateTimeField(blank=True, verbose_name='end date and time', null=True)), ('created_on', models.DateTimeField(verbose_name='created on', auto_now_add=True)), ('modified_on', models.DateTimeField(verbose_name='modified on', auto_now=True)), ('basket_line_text', models.CharField( max_length=120, help_text='This text will be shown in basket.', verbose_name='basket line text')), ], options={ 'verbose_name': 'Campaign', 'verbose_name_plural': 'Campaigns', 'abstract': False, }, bases=(shuup.utils.properties.MoneyPropped, parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='BasketCampaignTranslation', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('public_name', models.CharField(verbose_name='public name', max_length=120)), ('master', models.ForeignKey(on_delete=models.CASCADE, related_name='translations', to='campaigns.BasketCampaign', null=True, editable=False)), ], options={ 'db_tablespace': '', 'default_permissions': (), 'verbose_name': 'Campaign Translation', 'managed': True, 'db_table': 'campaigns_basketcampaign_translation', }, ), migrations.CreateModel( name='BasketCondition', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('active', models.BooleanField(default=True)), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='BasketDiscountEffect', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='BasketLineEffect', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='CatalogCampaign', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('name', models.CharField(max_length=120, help_text='The name for this campaign.', verbose_name='name')), ('identifier', shuup.core.fields.InternalIdentifierField(max_length=64, null=True, unique=True, editable=False, blank=True)), ('active', models.BooleanField(verbose_name='active', default=False)), ('start_datetime', models.DateTimeField(blank=True, verbose_name='start date and time', null=True)), ('end_datetime', models.DateTimeField(blank=True, verbose_name='end date and time', null=True)), ('created_on', models.DateTimeField(verbose_name='created on', auto_now_add=True)), ('modified_on', models.DateTimeField(verbose_name='modified on', auto_now=True)), ], options={ 'verbose_name': 'Campaign', 'verbose_name_plural': 'Campaigns', 'abstract': False, }, bases=(shuup.utils.properties.MoneyPropped, parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='CatalogCampaignTranslation', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('public_name', models.CharField(max_length=120, blank=True)), ('master', models.ForeignKey(on_delete=models.CASCADE, related_name='translations', to='campaigns.CatalogCampaign', null=True, editable=False)), ], options={ 'db_tablespace': '', 'default_permissions': (), 'verbose_name': 'Campaign Translation', 'managed': True, 'db_table': 'campaigns_catalogcampaign_translation', }, ), migrations.CreateModel( name='CatalogFilter', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('active', models.BooleanField(verbose_name='active', default=True)), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='ContactGroupSalesRange', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('min_value', shuup.core.fields.MoneyValueField(blank=True, decimal_places=9, verbose_name='min amount', null=True, max_digits=36)), ('max_value', shuup.core.fields.MoneyValueField(blank=True, decimal_places=9, verbose_name='max amount', null=True, max_digits=36)), ('group', models.ForeignKey(on_delete=models.CASCADE, related_name='+', to='shuup.ContactGroup', verbose_name='group')), ('shop', models.ForeignKey(on_delete=models.CASCADE, related_name='+', to='shuup.Shop', verbose_name='shop')), ], ), migrations.CreateModel( name='ContextCondition', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('active', models.BooleanField(default=True)), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='Coupon', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('code', models.CharField(max_length=12)), ('usage_limit_customer', models.PositiveIntegerField( blank=True, help_text= 'Limit the amount of usages per a single customer.', verbose_name='usage limit per customer', null=True)), ('usage_limit', models.PositiveIntegerField( blank=True, help_text= 'Set the absolute limit of usages for this coupon. If the limit is zero (0) coupon cannot be used.', verbose_name='usage limit', null=True)), ('active', models.BooleanField(verbose_name='is active', default=False)), ('created_on', models.DateTimeField(verbose_name='created on', auto_now_add=True)), ('modified_on', models.DateTimeField(verbose_name='modified on', auto_now=True)), ('created_by', models.ForeignKey( blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, null=True, verbose_name='created by')), ('modified_by', models.ForeignKey( blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, null=True, verbose_name='modified by')), ], ), migrations.CreateModel( name='CouponUsage', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ('created_on', models.DateTimeField(verbose_name='created on', auto_now_add=True)), ('modified_on', models.DateTimeField(verbose_name='modified on', auto_now=True)), ('coupon', models.ForeignKey(on_delete=models.CASCADE, related_name='usages', to='campaigns.Coupon')), ('created_by', models.ForeignKey( blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, null=True, verbose_name='created by')), ('modified_by', models.ForeignKey( blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, null=True, verbose_name='modified by')), ('order', models.ForeignKey(on_delete=models.CASCADE, related_name='coupon_usages', to='shuup.Order')), ], ), migrations.CreateModel( name='ProductDiscountEffect', fields=[ ('id', models.AutoField(serialize=False, verbose_name='ID', auto_created=True, primary_key=True)), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='BasketDiscountAmount', fields=[ ('basketdiscounteffect_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.BasketDiscountEffect', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('discount_amount', shuup.core.fields.MoneyValueField( blank=True, null=True, verbose_name='discount amount', help_text='Flat amount of discount.', decimal_places=9, default=None, max_digits=36)), ], options={ 'abstract': False, }, bases=('campaigns.basketdiscounteffect', ), ), migrations.CreateModel( name='BasketDiscountPercentage', fields=[ ('basketdiscounteffect_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.BasketDiscountEffect', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('discount_percentage', models.DecimalField( blank=True, null=True, verbose_name='discount percentage', help_text='The discount percentage for this campaign.', decimal_places=5, max_digits=6)), ], options={ 'abstract': False, }, bases=('campaigns.basketdiscounteffect', ), ), migrations.CreateModel( name='BasketMaxTotalAmountCondition', fields=[ ('basketcondition_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.BasketCondition', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('amount_value', shuup.core.fields.MoneyValueField( blank=True, null=True, verbose_name='maximum basket total amount', decimal_places=9, default=None, max_digits=36)), ], options={ 'abstract': False, }, bases=(shuup.utils.properties.MoneyPropped, 'campaigns.basketcondition'), ), migrations.CreateModel( name='BasketMaxTotalProductAmountCondition', fields=[ ('basketcondition_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.BasketCondition', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('product_count', models.DecimalField( blank=True, decimal_places=9, verbose_name='maximum product count in basket', null=True, max_digits=36)), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='BasketTotalAmountCondition', fields=[ ('basketcondition_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.BasketCondition', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('amount_value', shuup.core.fields.MoneyValueField( blank=True, null=True, verbose_name='basket total amount', decimal_places=9, default=None, max_digits=36)), ], options={ 'abstract': False, }, bases=(shuup.utils.properties.MoneyPropped, 'campaigns.basketcondition'), ), migrations.CreateModel( name='BasketTotalProductAmountCondition', fields=[ ('basketcondition_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.BasketCondition', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('product_count', models.DecimalField(blank=True, decimal_places=9, verbose_name='product count in basket', null=True, max_digits=36)), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='CategoryFilter', fields=[ ('catalogfilter_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.CatalogFilter', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('categories', models.ManyToManyField(verbose_name='categories', to='shuup.Category')), ], options={ 'abstract': False, }, bases=('campaigns.catalogfilter', ), ), migrations.CreateModel( name='ContactBasketCondition', fields=[ ('basketcondition_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.BasketCondition', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('contacts', models.ManyToManyField(verbose_name='contacts', to='shuup.Contact')), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='ContactCondition', fields=[ ('contextcondition_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.ContextCondition', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('contacts', models.ManyToManyField(verbose_name='contacts', to='shuup.Contact')), ], options={ 'abstract': False, }, bases=('campaigns.contextcondition', ), ), migrations.CreateModel( name='ContactGroupBasketCondition', fields=[ ('basketcondition_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.BasketCondition', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('contact_groups', models.ManyToManyField(verbose_name='contact groups', to='shuup.ContactGroup')), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='ContactGroupCondition', fields=[ ('contextcondition_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.ContextCondition', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('contact_groups', models.ManyToManyField(verbose_name='contact groups', to='shuup.ContactGroup')), ], options={ 'abstract': False, }, bases=('campaigns.contextcondition', ), ), migrations.CreateModel( name='DiscountFromProduct', fields=[ ('basketlineeffect_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.BasketLineEffect', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('per_line_discount', models.BooleanField( verbose_name='per line discount', help_text= 'Uncheck this if you want to give discount for each matched product.', default=True)), ('discount_amount', shuup.core.fields.MoneyValueField( blank=True, null=True, verbose_name='discount amount', help_text='Flat amount of discount.', decimal_places=9, default=None, max_digits=36)), ('products', models.ManyToManyField(verbose_name='product', to='shuup.Product')), ], options={ 'abstract': False, }, bases=('campaigns.basketlineeffect', ), ), migrations.CreateModel( name='FreeProductLine', fields=[ ('basketlineeffect_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.BasketLineEffect', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('quantity', models.PositiveIntegerField(default=1, verbose_name='quantity')), ('products', models.ManyToManyField(verbose_name='product', to='shuup.Product')), ], options={ 'abstract': False, }, bases=('campaigns.basketlineeffect', ), ), migrations.CreateModel( name='ProductDiscountAmount', fields=[ ('productdiscounteffect_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.ProductDiscountEffect', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('discount_amount', shuup.core.fields.MoneyValueField( blank=True, null=True, verbose_name='discount amount', help_text='Flat amount of discount.', decimal_places=9, default=None, max_digits=36)), ], options={ 'abstract': False, }, bases=('campaigns.productdiscounteffect', ), ), migrations.CreateModel( name='ProductDiscountPercentage', fields=[ ('productdiscounteffect_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.ProductDiscountEffect', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('discount_percentage', models.DecimalField( blank=True, null=True, verbose_name='discount percentage', help_text='The discount percentage for this campaign.', decimal_places=5, max_digits=6)), ], options={ 'abstract': False, }, bases=('campaigns.productdiscounteffect', ), ), migrations.CreateModel( name='ProductFilter', fields=[ ('catalogfilter_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.CatalogFilter', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('products', models.ManyToManyField(verbose_name='product', to='shuup.Product')), ], options={ 'abstract': False, }, bases=('campaigns.catalogfilter', ), ), migrations.CreateModel( name='ProductsInBasketCondition', fields=[ ('basketcondition_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.BasketCondition', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('quantity', models.PositiveIntegerField(default=1, verbose_name='quantity')), ('products', models.ManyToManyField(blank=True, verbose_name='products', to='shuup.Product')), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='ProductTypeFilter', fields=[ ('catalogfilter_ptr', models.OneToOneField(on_delete=models.CASCADE, to='campaigns.CatalogFilter', parent_link=True, serialize=False, auto_created=True, primary_key=True)), ('product_types', models.ManyToManyField(verbose_name='product Types', to='shuup.ProductType')), ], options={ 'abstract': False, }, bases=('campaigns.catalogfilter', ), ), migrations.AddField( model_name='productdiscounteffect', name='campaign', field=models.ForeignKey(on_delete=models.CASCADE, related_name='effects', to='campaigns.CatalogCampaign', verbose_name='campaign'), ), migrations.AddField( model_name='productdiscounteffect', name='polymorphic_ctype', field=models.ForeignKey( on_delete=models.CASCADE, related_name='polymorphic_campaigns.productdiscounteffect_set+', to='contenttypes.ContentType', null=True, editable=False), ), migrations.AddField( model_name='contextcondition', name='polymorphic_ctype', field=models.ForeignKey( on_delete=models.CASCADE, related_name='polymorphic_campaigns.contextcondition_set+', to='contenttypes.ContentType', null=True, editable=False), ), migrations.AddField( model_name='catalogfilter', name='polymorphic_ctype', field=models.ForeignKey( on_delete=models.CASCADE, related_name='polymorphic_campaigns.catalogfilter_set+', to='contenttypes.ContentType', null=True, editable=False), ), migrations.AddField( model_name='catalogcampaign', name='conditions', field=models.ManyToManyField(blank=True, related_name='campaign', to='campaigns.ContextCondition'), ), migrations.AddField( model_name='catalogcampaign', name='created_by', field=models.ForeignKey( blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, null=True, verbose_name='created by'), ), migrations.AddField( model_name='catalogcampaign', name='filters', field=models.ManyToManyField(blank=True, related_name='campaign', to='campaigns.CatalogFilter'), ), migrations.AddField( model_name='catalogcampaign', name='modified_by', field=models.ForeignKey( blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, null=True, verbose_name='modified by'), ), migrations.AddField( model_name='catalogcampaign', name='shop', field=models.ForeignKey( on_delete=models.CASCADE, to='shuup.Shop', verbose_name='shop', help_text='The shop where campaign is active.'), ), migrations.AddField( model_name='basketlineeffect', name='campaign', field=models.ForeignKey(on_delete=models.CASCADE, related_name='line_effects', to='campaigns.BasketCampaign', verbose_name='campaign'), ), migrations.AddField( model_name='basketlineeffect', name='polymorphic_ctype', field=models.ForeignKey( on_delete=models.CASCADE, related_name='polymorphic_campaigns.basketlineeffect_set+', to='contenttypes.ContentType', null=True, editable=False), ), migrations.AddField( model_name='basketdiscounteffect', name='campaign', field=models.ForeignKey(on_delete=models.CASCADE, related_name='discount_effects', to='campaigns.BasketCampaign', verbose_name='campaign'), ), migrations.AddField( model_name='basketdiscounteffect', name='polymorphic_ctype', field=models.ForeignKey( on_delete=models.CASCADE, related_name='polymorphic_campaigns.basketdiscounteffect_set+', to='contenttypes.ContentType', null=True, editable=False), ), migrations.AddField( model_name='basketcondition', name='polymorphic_ctype', field=models.ForeignKey( on_delete=models.CASCADE, related_name='polymorphic_campaigns.basketcondition_set+', to='contenttypes.ContentType', null=True, editable=False), ), migrations.AddField( model_name='basketcampaign', name='conditions', field=models.ManyToManyField(blank=True, related_name='campaign', to='campaigns.BasketCondition'), ), migrations.AddField( model_name='basketcampaign', name='coupon', field=models.OneToOneField(on_delete=models.CASCADE, verbose_name='coupon', blank=True, related_name='campaign', to='campaigns.Coupon', null=True), ), migrations.AddField( model_name='basketcampaign', name='created_by', field=models.ForeignKey( blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, null=True, verbose_name='created by'), ), migrations.AddField( model_name='basketcampaign', name='modified_by', field=models.ForeignKey( blank=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, null=True, verbose_name='modified by'), ), migrations.AddField( model_name='basketcampaign', name='shop', field=models.ForeignKey( on_delete=models.CASCADE, to='shuup.Shop', verbose_name='shop', help_text='The shop where campaign is active.'), ), migrations.AlterUniqueTogether( name='contactgroupsalesrange', unique_together=set([('group', 'shop')]), ), migrations.AlterUniqueTogether( name='catalogcampaigntranslation', unique_together=set([('language_code', 'master')]), ), migrations.AlterUniqueTogether( name='basketcampaigntranslation', unique_together=set([('language_code', 'master')]), ), ]
class Migration(migrations.Migration): dependencies = [ ('wshop', '0027_modify_shop_fields'), ] operations = [ migrations.RenameField( model_name='salesunittranslation', old_name='short_name', new_name='symbol', ), migrations.CreateModel( name='DisplayUnit', fields=[ ('id', models.AutoField( auto_created=True, primary_key=True, serialize=False)), ('internal_unit', models.ForeignKey( to='wshop.SalesUnit', related_name='display_units')), ('ratio', wshop.core.fields.QuantityField( default=1, max_digits=36, decimal_places=9, validators=[ wshop.core.models._units.validate_positive_not_zero])), ('decimals', models.PositiveSmallIntegerField(default=0)), ('comparison_value', wshop.core.fields.QuantityField( default=1, max_digits=36, decimal_places=9, validators=[ wshop.core.models._units.validate_positive_not_zero])), ('allow_bare_number', models.BooleanField(default=False)), ('default', models.BooleanField(default=False)), ], options={ 'verbose_name_plural': 'display units', 'verbose_name': 'display unit', }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='DisplayUnitTranslation', fields=[ ('id', models.AutoField( auto_created=True, primary_key=True, serialize=False)), ('language_code', models.CharField(max_length=15, db_index=True)), ('name', models.CharField(max_length=150)), ('symbol', models.CharField(max_length=50)), ('master', models.ForeignKey( to='wshop.DisplayUnit', editable=False, related_name='translations', null=True)), ], options={ 'db_table': 'wshop_displayunit_translation', 'default_permissions': (), 'db_tablespace': '', 'managed': True, 'verbose_name': 'display unit Translation', }, ), migrations.AlterUniqueTogether( name='displayunittranslation', unique_together=set([('language_code', 'master')]), ), migrations.AddField( model_name='shopproduct', name='display_unit', field=models.ForeignKey( to='wshop.DisplayUnit', blank=True, null=True), ), ]
class Migration(migrations.Migration): replaces = [ ('shuup_simple_cms', '0001_initial'), ('shuup_simple_cms', '0002_md_to_html'), ('shuup_simple_cms', '0003_alter_names'), ] dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='Page', fields=[ ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('available_from', models.DateTimeField(null=True, blank=True, verbose_name='available from')), ('available_to', models.DateTimeField(null=True, blank=True, verbose_name='available to')), ('created_on', models.DateTimeField(auto_now_add=True, verbose_name='created on')), ('modified_on', models.DateTimeField(auto_now=True, verbose_name='modified on')), ('identifier', shuup.core.fields.InternalIdentifierField(editable=False, blank=True, unique=True, null=True, max_length=64)), ('visible_in_menu', models.BooleanField(default=False, verbose_name='visible in menu')), ('list_children_on_page', models.BooleanField(default=False, verbose_name='list children on page')), ('lft', models.PositiveIntegerField(db_index=True, editable=False)), ('rght', models.PositiveIntegerField(db_index=True, editable=False)), ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), ('level', models.PositiveIntegerField(db_index=True, editable=False)), ('created_by', models.ForeignKey( on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, verbose_name='created by', null=True, related_name='+')), ('modified_by', models.ForeignKey( on_delete=django.db.models.deletion.SET_NULL, blank=True, to=settings.AUTH_USER_MODEL, verbose_name='modified by', null=True, related_name='+')), ('parent', mptt.fields.TreeForeignKey(blank=True, to='shuup_simple_cms.Page', verbose_name='parent', null=True, related_name='children', on_delete=models.CASCADE)), ], options={ 'verbose_name_plural': 'pages', 'ordering': ('-id', ), 'verbose_name': 'page', }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='PageTranslation', fields=[ ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('language_code', models.CharField(db_index=True, max_length=15, verbose_name='Language')), ('title', models.CharField(max_length=256, verbose_name='title')), ('url', models.CharField(blank=True, default=None, verbose_name='URL', null=True, max_length=100, unique=True)), ('content', models.TextField(verbose_name='content')), ('master', models.ForeignKey(editable=False, to='shuup_simple_cms.Page', null=True, related_name='translations', on_delete=models.CASCADE)), ], options={ 'default_permissions': (), 'db_tablespace': '', 'db_table': 'shuup_simple_cms_page_translation', 'managed': True, 'verbose_name': 'page Translation', }, ), migrations.AlterUniqueTogether(name='pagetranslation', unique_together=set([('language_code', 'master')])), migrations.AlterField( model_name='page', name='available_from', field=models.DateTimeField( null=True, blank=True, help_text=( 'Set an available from date to restrict the page to ' 'be available only after a certain date and time. This ' 'is useful for pages describing sales campaigns or other ' 'time-sensitive pages.'), verbose_name='available from')), migrations.AlterField( model_name='page', name='available_to', field=models.DateTimeField( null=True, blank=True, help_text=( 'Set an available to date to restrict the page to be ' 'available only after a certain date and time. This is ' 'useful for pages describing sales campaigns or other ' 'time-sensitive pages.'), verbose_name='available to')), migrations.AlterField( model_name='page', name='list_children_on_page', field=models.BooleanField(help_text=( 'Check this if this page should list its children pages.'), default=False, verbose_name='list children on page'), ), migrations.AlterField( model_name='page', name='parent', field=mptt.fields.TreeForeignKey( blank=True, to='shuup_simple_cms.Page', verbose_name='parent', null=True, related_name='children', on_delete=models.CASCADE, help_text=('Set this to a parent page if this page should be ' 'subcategorized under another page.'))), migrations.AlterField( model_name='page', name='visible_in_menu', field=models.BooleanField(help_text=( 'Check this if this page should have a link in the top ' 'menu of the store front.'), default=False, verbose_name='visible in menu'), ), migrations.AlterField( model_name='pagetranslation', name='content', field=models.TextField(help_text=( 'The page content. This is the text that is displayed ' 'when customers click on your page link.'), verbose_name='content'), ), migrations.AlterField( model_name='pagetranslation', name='title', field=models.CharField( max_length=256, help_text=( 'The page title. This is shown anywhere links to your ' 'page are shown.'), verbose_name='title'), ), migrations.AlterField( model_name='pagetranslation', name='url', field=models.CharField( blank=True, default=None, verbose_name='URL', null=True, max_length=100, help_text=( 'The page url. Choose a descriptive url so that search ' 'engines can rank your page higher. Often the best url is ' 'simply the page title with spaces replaced with dashes.'), unique=True), ), ]
class Migration(migrations.Migration): replaces = [ ('campaigns', '0001_initial'), ('campaigns', '0002_productsinbasketcondition_operator'), ('campaigns', '0003_category_products'), ('campaigns', '0004_logmodels'), ('campaigns', '0005_catalogfiltercachedshopproduct'), ('campaigns', '0006_basket_cond_category_to_categories'), ('campaigns', '0007_add_excluded_categories'), ('campaigns', '0008_freeproductline_quantity_to_quantityfield'), ('campaigns', '0009_hourcondition'), ('campaigns', '0010_hourbasketcondition'), ('campaigns', '0011_alter_names'), ] dependencies = [ ('wshop', '0001_squashed_0039_alter_names'), ('contenttypes', '0002_remove_content_type_name'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='BasketCampaign', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('name', models.CharField( help_text='The name for this campaign.', max_length=120, verbose_name='name')), ('identifier', wshop.core.fields.InternalIdentifierField( editable=False, blank=True, max_length=64, null=True, unique=True)), ('active', models.BooleanField( help_text= 'Check this if the campaign is currently active. Please also set a start and end date.', verbose_name='active', default=False)), ('start_datetime', models.DateTimeField( blank=True, help_text= 'The date and time the campaign starts. This is only applicable if the campaign is marked as active.', null=True, verbose_name='start date and time')), ('end_datetime', models.DateTimeField( blank=True, help_text= 'The date and time the campaign ends. This is only applicable if the campaign is marked as active.', null=True, verbose_name='end date and time')), ('created_on', models.DateTimeField( verbose_name='created on', auto_now_add=True)), ('modified_on', models.DateTimeField( auto_now=True, verbose_name='modified on')), ('basket_line_text', models.CharField( help_text='This text will be shown in basket.', max_length=120, verbose_name='basket line text')), ], options={ 'abstract': False, 'verbose_name_plural': 'Campaigns', 'verbose_name': 'Campaign', }, bases=(wshop.utils.properties.MoneyPropped, parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='BasketCampaignLogEntry', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('created_on', models.DateTimeField( verbose_name='created on', auto_now_add=True)), ('message', models.CharField( max_length=256, verbose_name='message')), ('identifier', models.CharField( blank=True, max_length=64, verbose_name='identifier')), ('kind', enumfields.fields.EnumIntegerField( enum=wshop.utils.analog.LogEntryKind, verbose_name='log entry kind', default=0)), ('extra', jsonfield.fields.JSONField( blank=True, null=True, verbose_name='extra data')), ('target', models.ForeignKey( to='campaigns.BasketCampaign', related_name='log_entries', verbose_name='target')), ('user', models.ForeignKey( to=settings.AUTH_USER_MODEL, on_delete=django.db.models.deletion.PROTECT, null=True, verbose_name='user')), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='BasketCampaignTranslation', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('language_code', models.CharField( max_length=15, db_index=True, verbose_name='Language')), ('public_name', models.CharField( help_text='The campaign name to show in the store front.', max_length=120, verbose_name='public name')), ('master', models.ForeignKey( to='campaigns.BasketCampaign', editable=False, related_name='translations', null=True)), ], options={ 'managed': True, 'db_table': 'campaigns_basketcampaign_translation', 'default_permissions': (), 'db_tablespace': '', 'verbose_name': 'Campaign Translation', }, ), migrations.CreateModel( name='BasketCondition', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('active', models.BooleanField(default=True)), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='BasketDiscountEffect', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='BasketLineEffect', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='CatalogCampaign', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('name', models.CharField( help_text='The name for this campaign.', max_length=120, verbose_name='name')), ('identifier', wshop.core.fields.InternalIdentifierField( editable=False, blank=True, max_length=64, null=True, unique=True)), ('active', models.BooleanField( help_text= 'Check this if the campaign is currently active. Please also set a start and end date.', verbose_name='active', default=False)), ('start_datetime', models.DateTimeField( blank=True, help_text= 'The date and time the campaign starts. This is only applicable if the campaign is marked as active.', null=True, verbose_name='start date and time')), ('end_datetime', models.DateTimeField( blank=True, help_text= 'The date and time the campaign ends. This is only applicable if the campaign is marked as active.', null=True, verbose_name='end date and time')), ('created_on', models.DateTimeField( verbose_name='created on', auto_now_add=True)), ('modified_on', models.DateTimeField( auto_now=True, verbose_name='modified on')), ], options={ 'abstract': False, 'verbose_name_plural': 'Campaigns', 'verbose_name': 'Campaign', }, bases=(wshop.utils.properties.MoneyPropped, parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='CatalogCampaignLogEntry', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('created_on', models.DateTimeField( verbose_name='created on', auto_now_add=True)), ('message', models.CharField( max_length=256, verbose_name='message')), ('identifier', models.CharField( blank=True, max_length=64, verbose_name='identifier')), ('kind', enumfields.fields.EnumIntegerField( enum=wshop.utils.analog.LogEntryKind, verbose_name='log entry kind', default=0)), ('extra', jsonfield.fields.JSONField( blank=True, null=True, verbose_name='extra data')), ('target', models.ForeignKey( to='campaigns.CatalogCampaign', related_name='log_entries', verbose_name='target')), ('user', models.ForeignKey( to=settings.AUTH_USER_MODEL, on_delete=django.db.models.deletion.PROTECT, null=True, verbose_name='user')), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='CatalogCampaignTranslation', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('language_code', models.CharField( max_length=15, db_index=True, verbose_name='Language')), ('public_name', models.CharField( blank=True, help_text='The campaign name to show in the store front.', max_length=120)), ('master', models.ForeignKey( to='campaigns.CatalogCampaign', editable=False, related_name='translations', null=True)), ], options={ 'managed': True, 'db_table': 'campaigns_catalogcampaign_translation', 'default_permissions': (), 'db_tablespace': '', 'verbose_name': 'Campaign Translation', }, ), migrations.CreateModel( name='CatalogFilter', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('active', models.BooleanField( verbose_name='active', default=True)), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='CatalogFilterCachedShopProduct', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ], ), migrations.CreateModel( name='ContactGroupSalesRange', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('min_value', wshop.core.fields.MoneyValueField( blank=True, decimal_places=9, null=True, max_digits=36, verbose_name='min amount')), ('max_value', wshop.core.fields.MoneyValueField( blank=True, decimal_places=9, null=True, max_digits=36, verbose_name='max amount')), ('group', models.ForeignKey( to='wshop.ContactGroup', related_name='+', verbose_name='group')), ('shop', models.ForeignKey( to='wshop.Shop', related_name='+', verbose_name='shop')), ], ), migrations.CreateModel( name='ContextCondition', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('active', models.BooleanField(default=True)), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='Coupon', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('code', models.CharField(max_length=12)), ('usage_limit_customer', models.PositiveIntegerField( blank=True, help_text= 'Limit the amount of usages per a single customer.', null=True, verbose_name='usage limit per customer')), ('usage_limit', models.PositiveIntegerField( blank=True, help_text= 'Set the absolute limit of usages for this coupon. If the limit is zero (0) coupon cannot be used.', null=True, verbose_name='usage limit')), ('active', models.BooleanField( verbose_name='is active', default=False)), ('created_on', models.DateTimeField( verbose_name='created on', auto_now_add=True)), ('modified_on', models.DateTimeField( auto_now=True, verbose_name='modified on')), ('created_by', models.ForeignKey( to=settings.AUTH_USER_MODEL, blank=True, on_delete=django.db.models.deletion.SET_NULL, null=True, verbose_name='created by', related_name='+')), ('modified_by', models.ForeignKey( to=settings.AUTH_USER_MODEL, blank=True, on_delete=django.db.models.deletion.SET_NULL, null=True, verbose_name='modified by', related_name='+')), ], ), migrations.CreateModel( name='CouponLogEntry', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('created_on', models.DateTimeField( verbose_name='created on', auto_now_add=True)), ('message', models.CharField( max_length=256, verbose_name='message')), ('identifier', models.CharField( blank=True, max_length=64, verbose_name='identifier')), ('kind', enumfields.fields.EnumIntegerField( enum=wshop.utils.analog.LogEntryKind, verbose_name='log entry kind', default=0)), ('extra', jsonfield.fields.JSONField( blank=True, null=True, verbose_name='extra data')), ('target', models.ForeignKey( to='campaigns.Coupon', related_name='log_entries', verbose_name='target')), ('user', models.ForeignKey( to=settings.AUTH_USER_MODEL, on_delete=django.db.models.deletion.PROTECT, null=True, verbose_name='user')), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='CouponUsage', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('created_on', models.DateTimeField( verbose_name='created on', auto_now_add=True)), ('modified_on', models.DateTimeField( auto_now=True, verbose_name='modified on')), ('coupon', models.ForeignKey( to='campaigns.Coupon', related_name='usages')), ('created_by', models.ForeignKey( to=settings.AUTH_USER_MODEL, blank=True, on_delete=django.db.models.deletion.SET_NULL, null=True, verbose_name='created by', related_name='+')), ('modified_by', models.ForeignKey( to=settings.AUTH_USER_MODEL, blank=True, on_delete=django.db.models.deletion.SET_NULL, null=True, verbose_name='modified by', related_name='+')), ('order', models.ForeignKey( to='wshop.Order', related_name='coupon_usages')), ], ), migrations.CreateModel( name='CouponUsageLogEntry', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ('created_on', models.DateTimeField( verbose_name='created on', auto_now_add=True)), ('message', models.CharField( max_length=256, verbose_name='message')), ('identifier', models.CharField( blank=True, max_length=64, verbose_name='identifier')), ('kind', enumfields.fields.EnumIntegerField( enum=wshop.utils.analog.LogEntryKind, verbose_name='log entry kind', default=0)), ('extra', jsonfield.fields.JSONField( blank=True, null=True, verbose_name='extra data')), ('target', models.ForeignKey( to='campaigns.CouponUsage', related_name='log_entries', verbose_name='target')), ('user', models.ForeignKey( to=settings.AUTH_USER_MODEL, on_delete=django.db.models.deletion.PROTECT, null=True, verbose_name='user')), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='ProductDiscountEffect', fields=[ ('id', models.AutoField( auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), ], options={ 'abstract': False, }, ), migrations.CreateModel( name='BasketDiscountAmount', fields=[ ('basketdiscounteffect_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketDiscountEffect')), ('discount_amount', wshop.core.fields.MoneyValueField( decimal_places=9, max_digits=36, blank=True, help_text='Flat amount of discount.', null=True, verbose_name='discount amount', default=None)), ], options={ 'abstract': False, }, bases=('campaigns.basketdiscounteffect', ), ), migrations.CreateModel( name='BasketDiscountPercentage', fields=[ ('basketdiscounteffect_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketDiscountEffect')), ('discount_percentage', models.DecimalField( decimal_places=5, max_digits=6, blank=True, help_text='The discount percentage for this campaign.', null=True, verbose_name='discount percentage')), ], options={ 'abstract': False, }, bases=('campaigns.basketdiscounteffect', ), ), migrations.CreateModel( name='BasketMaxTotalAmountCondition', fields=[ ('basketcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketCondition')), ('amount_value', wshop.core.fields.MoneyValueField( decimal_places=9, max_digits=36, blank=True, null=True, verbose_name='maximum basket total amount', default=None)), ], options={ 'abstract': False, }, bases=(wshop.utils.properties.MoneyPropped, 'campaigns.basketcondition'), ), migrations.CreateModel( name='BasketMaxTotalProductAmountCondition', fields=[ ('basketcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketCondition')), ('product_count', models.DecimalField( blank=True, decimal_places=9, null=True, max_digits=36, verbose_name='maximum product count in basket')), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='BasketTotalAmountCondition', fields=[ ('basketcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketCondition')), ('amount_value', wshop.core.fields.MoneyValueField( decimal_places=9, max_digits=36, blank=True, null=True, verbose_name='basket total amount', default=None)), ], options={ 'abstract': False, }, bases=(wshop.utils.properties.MoneyPropped, 'campaigns.basketcondition'), ), migrations.CreateModel( name='BasketTotalProductAmountCondition', fields=[ ('basketcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketCondition')), ('product_count', models.DecimalField( blank=True, decimal_places=9, null=True, max_digits=36, verbose_name='product count in basket')), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='CategoryFilter', fields=[ ('catalogfilter_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.CatalogFilter')), ('categories', models.ManyToManyField( to='wshop.Category', verbose_name='categories')), ], options={ 'abstract': False, }, bases=('campaigns.catalogfilter', ), ), migrations.CreateModel( name='CategoryProductsBasketCondition', fields=[ ('basketcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketCondition')), ('operator', enumfields.fields.EnumIntegerField( enum=wshop.campaigns.models.basket_conditions. ComparisonOperator, verbose_name='operator', default=1)), ('quantity', models.PositiveIntegerField( verbose_name='quantity', default=1)), ('categories', models.ManyToManyField( to='wshop.Category', verbose_name='categories', related_name= '_categoryproductsbasketcondition_categories_+')), ('excluded_categories', models.ManyToManyField( blank=True, help_text= "If the customer has even a single product in the basket from these categories this rule won't match thus the campaign cannot be applied to the basket.", to='wshop.Category', verbose_name='excluded categories', related_name= '_categoryproductsbasketcondition_excluded_categories_+')), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='ContactBasketCondition', fields=[ ('basketcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketCondition')), ('contacts', models.ManyToManyField( to='wshop.Contact', verbose_name='contacts')), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='ContactCondition', fields=[ ('contextcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.ContextCondition')), ('contacts', models.ManyToManyField( to='wshop.Contact', verbose_name='contacts')), ], options={ 'abstract': False, }, bases=('campaigns.contextcondition', ), ), migrations.CreateModel( name='ContactGroupBasketCondition', fields=[ ('basketcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketCondition')), ('contact_groups', models.ManyToManyField( to='wshop.ContactGroup', verbose_name='contact groups')), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='ContactGroupCondition', fields=[ ('contextcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.ContextCondition')), ('contact_groups', models.ManyToManyField( to='wshop.ContactGroup', verbose_name='contact groups')), ], options={ 'abstract': False, }, bases=('campaigns.contextcondition', ), ), migrations.CreateModel( name='DiscountFromCategoryProducts', fields=[ ('basketlineeffect_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketLineEffect')), ('discount_amount', wshop.core.fields.MoneyValueField( decimal_places=9, max_digits=36, blank=True, help_text='Flat amount of discount.', null=True, verbose_name='discount amount', default=None)), ('discount_percentage', models.DecimalField( decimal_places=5, max_digits=6, blank=True, help_text='The discount percentage for this campaign.', null=True, verbose_name='discount percentage')), ('category', models.ForeignKey( to='wshop.Category', verbose_name='category')), ], options={ 'abstract': False, }, bases=('campaigns.basketlineeffect', ), ), migrations.CreateModel( name='DiscountFromProduct', fields=[ ('basketlineeffect_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketLineEffect')), ('per_line_discount', models.BooleanField( help_text= 'Uncheck this if you want to give discount for each matched product.', verbose_name='per line discount', default=True)), ('discount_amount', wshop.core.fields.MoneyValueField( decimal_places=9, max_digits=36, blank=True, help_text='Flat amount of discount.', null=True, verbose_name='discount amount', default=None)), ('products', models.ManyToManyField( to='wshop.Product', verbose_name='product')), ], options={ 'abstract': False, }, bases=('campaigns.basketlineeffect', ), ), migrations.CreateModel( name='FreeProductLine', fields=[ ('basketlineeffect_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketLineEffect')), ('quantity', wshop.core.fields.QuantityField( decimal_places=9, max_digits=36, verbose_name='quantity', default=1)), ('products', models.ManyToManyField( to='wshop.Product', verbose_name='product')), ], options={ 'abstract': False, }, bases=('campaigns.basketlineeffect', ), ), migrations.CreateModel( name='HourBasketCondition', fields=[ ('basketcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketCondition')), ('hour_start', models.TimeField( help_text='12pm is considered noon and 12am as midnight.', verbose_name='start time')), ('hour_end', models.TimeField( help_text= '12pm is considered noon and 12am as midnight. End time is not considered match.', verbose_name='end time')), ('days', models.CharField( max_length=255, verbose_name='days', validators=[ django.core.validators.RegexValidator( re.compile('^[\\d,]+\\Z', 32), 'Enter only digits separated by commas.', 'invalid') ])), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='HourCondition', fields=[ ('contextcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.ContextCondition')), ('hour_start', models.TimeField( help_text='12pm is considered noon and 12am as midnight.', verbose_name='start time')), ('hour_end', models.TimeField( help_text= '12pm is considered noon and 12am as midnight. End time is not considered match.', verbose_name='end time')), ('days', models.CharField( max_length=255, verbose_name='days', validators=[ django.core.validators.RegexValidator( re.compile('^[\\d,]+\\Z', 32), 'Enter only digits separated by commas.', 'invalid') ])), ], options={ 'abstract': False, }, bases=('campaigns.contextcondition', ), ), migrations.CreateModel( name='ProductDiscountAmount', fields=[ ('productdiscounteffect_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.ProductDiscountEffect')), ('discount_amount', wshop.core.fields.MoneyValueField( decimal_places=9, max_digits=36, blank=True, help_text='Flat amount of discount.', null=True, verbose_name='discount amount', default=None)), ], options={ 'abstract': False, }, bases=('campaigns.productdiscounteffect', ), ), migrations.CreateModel( name='ProductDiscountPercentage', fields=[ ('productdiscounteffect_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.ProductDiscountEffect')), ('discount_percentage', models.DecimalField( decimal_places=5, max_digits=6, blank=True, help_text='The discount percentage for this campaign.', null=True, verbose_name='discount percentage')), ], options={ 'abstract': False, }, bases=('campaigns.productdiscounteffect', ), ), migrations.CreateModel( name='ProductFilter', fields=[ ('catalogfilter_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.CatalogFilter')), ('products', models.ManyToManyField( to='wshop.Product', verbose_name='product')), ], options={ 'abstract': False, }, bases=('campaigns.catalogfilter', ), ), migrations.CreateModel( name='ProductsInBasketCondition', fields=[ ('basketcondition_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.BasketCondition')), ('operator', enumfields.fields.EnumIntegerField( enum=wshop.campaigns.models.basket_conditions. ComparisonOperator, verbose_name='operator', default=1)), ('quantity', models.PositiveIntegerField( verbose_name='quantity', default=1)), ('products', models.ManyToManyField( blank=True, to='wshop.Product', verbose_name='products')), ], options={ 'abstract': False, }, bases=('campaigns.basketcondition', ), ), migrations.CreateModel( name='ProductTypeFilter', fields=[ ('catalogfilter_ptr', models.OneToOneField( auto_created=True, primary_key=True, parent_link=True, serialize=False, to='campaigns.CatalogFilter')), ('product_types', models.ManyToManyField( to='wshop.ProductType', verbose_name='product Types')), ], options={ 'abstract': False, }, bases=('campaigns.catalogfilter', ), ), migrations.AddField( model_name='productdiscounteffect', name='campaign', field=models.ForeignKey( to='campaigns.CatalogCampaign', related_name='effects', verbose_name='campaign'), ), migrations.AddField( model_name='productdiscounteffect', name='polymorphic_ctype', field=models.ForeignKey( to='contenttypes.ContentType', editable=False, related_name= 'polymorphic_campaigns.productdiscounteffect_set+', null=True), ), migrations.AddField( model_name='contextcondition', name='polymorphic_ctype', field=models.ForeignKey( to='contenttypes.ContentType', editable=False, related_name='polymorphic_campaigns.contextcondition_set+', null=True), ), migrations.AddField( model_name='catalogfiltercachedshopproduct', name='filter', field=models.ForeignKey( to='campaigns.CatalogFilter', related_name='cached_shop_products'), ), migrations.AddField( model_name='catalogfiltercachedshopproduct', name='shop_product', field=models.ForeignKey( to='wshop.ShopProduct', related_name='cached_catalog_campaign_filters'), ), migrations.AddField( model_name='catalogfilter', name='polymorphic_ctype', field=models.ForeignKey( to='contenttypes.ContentType', editable=False, related_name='polymorphic_campaigns.catalogfilter_set+', null=True), ), migrations.AddField( model_name='catalogcampaign', name='conditions', field=models.ManyToManyField( blank=True, to='campaigns.ContextCondition', related_name='campaign'), ), migrations.AddField( model_name='catalogcampaign', name='created_by', field=models.ForeignKey( to=settings.AUTH_USER_MODEL, blank=True, on_delete=django.db.models.deletion.SET_NULL, null=True, verbose_name='created by', related_name='+'), ), migrations.AddField( model_name='catalogcampaign', name='filters', field=models.ManyToManyField( blank=True, to='campaigns.CatalogFilter', related_name='campaign'), ), migrations.AddField( model_name='catalogcampaign', name='modified_by', field=models.ForeignKey( to=settings.AUTH_USER_MODEL, blank=True, on_delete=django.db.models.deletion.SET_NULL, null=True, verbose_name='modified by', related_name='+'), ), migrations.AddField( model_name='catalogcampaign', name='shop', field=models.ForeignKey( help_text='The shop where the campaign is active.', to='wshop.Shop', verbose_name='shop'), ), migrations.AddField( model_name='basketlineeffect', name='campaign', field=models.ForeignKey( to='campaigns.BasketCampaign', related_name='line_effects', verbose_name='campaign'), ), migrations.AddField( model_name='basketlineeffect', name='polymorphic_ctype', field=models.ForeignKey( to='contenttypes.ContentType', editable=False, related_name='polymorphic_campaigns.basketlineeffect_set+', null=True), ), migrations.AddField( model_name='basketdiscounteffect', name='campaign', field=models.ForeignKey( to='campaigns.BasketCampaign', related_name='discount_effects', verbose_name='campaign'), ), migrations.AddField( model_name='basketdiscounteffect', name='polymorphic_ctype', field=models.ForeignKey( to='contenttypes.ContentType', editable=False, related_name='polymorphic_campaigns.basketdiscounteffect_set+', null=True), ), migrations.AddField( model_name='basketcondition', name='polymorphic_ctype', field=models.ForeignKey( to='contenttypes.ContentType', editable=False, related_name='polymorphic_campaigns.basketcondition_set+', null=True), ), migrations.AddField( model_name='basketcampaign', name='conditions', field=models.ManyToManyField( blank=True, to='campaigns.BasketCondition', related_name='campaign'), ), migrations.AddField( model_name='basketcampaign', name='coupon', field=models.OneToOneField( blank=True, to='campaigns.Coupon', null=True, verbose_name='coupon', related_name='campaign'), ), migrations.AddField( model_name='basketcampaign', name='created_by', field=models.ForeignKey( to=settings.AUTH_USER_MODEL, blank=True, on_delete=django.db.models.deletion.SET_NULL, null=True, verbose_name='created by', related_name='+'), ), migrations.AddField( model_name='basketcampaign', name='modified_by', field=models.ForeignKey( to=settings.AUTH_USER_MODEL, blank=True, on_delete=django.db.models.deletion.SET_NULL, null=True, verbose_name='modified by', related_name='+'), ), migrations.AddField( model_name='basketcampaign', name='shop', field=models.ForeignKey( help_text='The shop where the campaign is active.', to='wshop.Shop', verbose_name='shop'), ), migrations.AlterUniqueTogether( name='contactgroupsalesrange', unique_together=set([('group', 'shop')]), ), migrations.AlterUniqueTogether( name='catalogcampaigntranslation', unique_together=set([('language_code', 'master')]), ), migrations.AlterUniqueTogether( name='basketcampaigntranslation', unique_together=set([('language_code', 'master')]), ), ]
class Migration(migrations.Migration): dependencies = [ ("publicbody", "0038_foilaw_scale_of_fees"), migrations.swappable_dependency(settings.FILINGCABINET_DOCUMENT_MODEL), ("froide_legalaction", "0012_remove_moved_lawsuit_fields"), ] operations = [ migrations.CreateModel( name="LegalDecisionTag", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ], options={ "abstract": False, }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name="LegalDecisionType", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ], options={ "verbose_name": "Legal Decision Type", "verbose_name_plural": "Legal Decision Types", }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name="LegalDecision", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ("date", models.DateField(blank=True, null=True)), ("outcome", models.CharField(max_length=500, blank=True)), ("reference", models.CharField(max_length=200)), ("paragraphs", models.JSONField(default=list, blank=True, null=True)), ("source_data", models.JSONField(blank=True, null=True)), ( "foi_court", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="publicbody.publicbody", ), ), ( "foi_document", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.FILINGCABINET_DOCUMENT_MODEL, ), ), ( "foi_law", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="publicbody.foilaw", ), ), ( "foi_lawsuit", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="froide_legalaction.lawsuit", ), ), ( "tags", models.ManyToManyField( blank=True, to="froide_legalaction.LegalDecisionTag" ), ), ( "type", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="froide_legalaction.legaldecisiontype", ), ), ], options={ "abstract": False, }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name="LegalDecisionTypeTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField( db_index=True, max_length=15, verbose_name="Language" ), ), ("title", models.CharField(max_length=255, verbose_name="title")), ( "slug", models.SlugField( max_length=255, verbose_name="slug", ), ), ( "master", parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="froide_legalaction.legaldecisiontype", ), ), ], options={ "verbose_name": "Legal Decision Type Translation", "db_table": "froide_legalaction_legaldecisiontype_translation", "db_tablespace": "", "managed": True, "default_permissions": (), "unique_together": {("language_code", "master")}, }, bases=(parler.models.TranslatedFieldsModelMixin, models.Model), ), migrations.CreateModel( name="LegalDecisionTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField( db_index=True, max_length=15, verbose_name="Language" ), ), ("abstract", models.TextField(blank=True)), ("fulltext", models.TextField(blank=True)), ("court", models.CharField(blank=True, max_length=500)), ("law", models.CharField(blank=True, max_length=500)), ( "master", parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="froide_legalaction.legaldecision", ), ), ], options={ "verbose_name": "legal decision Translation", "db_table": "froide_legalaction_legaldecision_translation", "db_tablespace": "", "managed": True, "default_permissions": (), "unique_together": {("language_code", "master")}, }, bases=(parler.models.TranslatedFieldsModelMixin, models.Model), ), migrations.CreateModel( name="LegalDecisionTagTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField( db_index=True, max_length=15, verbose_name="Language" ), ), ("name", models.CharField(max_length=100, verbose_name="name")), ("slug", models.SlugField(max_length=100, verbose_name="slug")), ( "master", parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="froide_legalaction.legaldecisiontag", ), ), ], options={ "verbose_name": "legal decision tag Translation", "db_table": "froide_legalaction_legaldecisiontag_translation", "db_tablespace": "", "managed": True, "default_permissions": (), "unique_together": {("language_code", "master")}, }, bases=(parler.models.TranslatedFieldsModelMixin, models.Model), ), ]
class Migration(migrations.Migration): dependencies = [("api", "0049_add_all_other_translations")] operations = [ migrations.CreateModel( name="PlanTemplate", fields=[( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), )], options={"abstract": False}, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name="PlanTemplateTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language"), ), ( "preflight_message", sfdo_template_helpers.fields.MarkdownField( blank=True, property_suffix="_markdown"), ), ( "post_install_message", sfdo_template_helpers.fields.MarkdownField( blank=True, property_suffix="_markdown"), ), ( "master", models.ForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="api.PlanTemplate", ), ), ], options={ "verbose_name": "plan template Translation", "db_table": "api_plantemplate_translation", "db_tablespace": "", "managed": True, "default_permissions": (), }, ), migrations.RenameField( model_name="plantranslation", old_name="post_install_message", new_name="post_install_message_additional", ), migrations.RenameField( model_name="plantranslation", old_name="preflight_message", new_name="preflight_message_additional", ), migrations.AddField( model_name="plan", name="plan_template", field=models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="api.PlanTemplate", ), ), migrations.AlterUniqueTogether( name="plantemplatetranslation", unique_together={("language_code", "master")}, ), ]
class Migration(migrations.Migration): dependencies = [ ('shuup', '0009_update_tax_name_max_length'), ('shuup_simple_cms', '0001_initial'), ('filer', '0002_auto_20150606_2003'), ] operations = [ migrations.CreateModel( name='Carousel', fields=[ ('id', models.AutoField(primary_key=True, serialize=False, auto_created=True, verbose_name='ID')), ('name', models.CharField(help_text='Name is only used to configure carousels.', max_length=50, verbose_name='name')), ('animation', enumfields.fields.EnumIntegerField(help_text='Animation type for cycling slides.', enum=shuup.front.apps.carousel.models.CarouselMode, verbose_name='animation', default=0)), ('interval', models.IntegerField(help_text='Slide interval in seconds.', verbose_name='interval', default=5)), ('pause_on_hover', models.BooleanField(help_text='Pauses the cycling of the carousel on mouse over.', verbose_name='pause on hover', default=True)), ('is_arrows_visible', models.BooleanField(verbose_name='show navigation arrows', default=True)), ('use_dot_navigation', models.BooleanField(verbose_name='show navigation dots', default=True)), ('image_width', models.IntegerField(help_text='Slide images will be cropped to this width.', verbose_name='image width', default=1200)), ('image_height', models.IntegerField(help_text='Slide images will be cropped to this height.', verbose_name='image height', default=600)), ], options={ 'verbose_name': 'Carousel', 'verbose_name_plural': 'Carousels', }, ), migrations.CreateModel( name='Slide', fields=[ ('id', models.AutoField(primary_key=True, serialize=False, auto_created=True, verbose_name='ID')), ('name', models.CharField(help_text='Name is only used to configure slides.', blank=True, max_length=50, verbose_name='name', null=True)), ('ordering', models.IntegerField(verbose_name='ordering', blank=True, default=0, null=True)), ('target', enumfields.fields.EnumIntegerField(verbose_name='link target', enum=shuup.front.apps.carousel.models.LinkTargetType, default=0)), ('available_from', models.DateTimeField(verbose_name='available from', blank=True, null=True)), ('available_to', models.DateTimeField(verbose_name='available to', blank=True, null=True)), ('carousel', models.ForeignKey(related_name='slides', to='carousel.Carousel', on_delete=models.CASCADE)), ('category_link', models.ForeignKey(to='shuup.Category', related_name='+', null=True, verbose_name='category link', blank=True, on_delete=models.CASCADE)), ('cms_page_link', models.ForeignKey(to='shuup_simple_cms.Page', related_name='+', null=True, verbose_name='cms page link', blank=True, on_delete=models.CASCADE)), ('product_link', models.ForeignKey(to='shuup.Product', related_name='+', null=True, verbose_name='product link', blank=True, on_delete=models.CASCADE)), ], options={ 'ordering': ('ordering', 'id'), 'verbose_name': 'Slide', 'verbose_name_plural': 'Slides', }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name='SlideTranslation', fields=[ ('id', models.AutoField(primary_key=True, serialize=False, auto_created=True, verbose_name='ID')), ('language_code', models.CharField(verbose_name='Language', max_length=15, db_index=True)), ('caption', models.CharField(verbose_name='caption', blank=True, max_length=80, null=True)), ('caption_text', models.TextField(help_text='When displayed in banner box mode, caption text is shown as a tooltip', blank=True, verbose_name='caption text', null=True)), ('external_link', models.CharField(verbose_name='external link', blank=True, max_length=160, null=True)), ('image', filer.fields.image.FilerImageField(on_delete=django.db.models.deletion.PROTECT, to='filer.Image', related_name='+', null=True, verbose_name='image', blank=True)), ('master', models.ForeignKey(editable=False, related_name='translations', null=True, to='carousel.Slide', on_delete=models.CASCADE)), ], options={ 'managed': True, 'db_tablespace': '', 'db_table': 'carousel_slide_translation', 'default_permissions': (), 'verbose_name': 'Slide Translation', }, ), migrations.AlterUniqueTogether( name='slidetranslation', unique_together=set([('language_code', 'master')]), ), ]
class Migration(migrations.Migration): initial = True dependencies = [] operations = [ migrations.CreateModel( name="Page", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "created_at", models.DateTimeField(auto_now_add=True, verbose_name="Created at"), ), ( "updated_at", models.DateTimeField(auto_now=True, verbose_name="Updated at"), ), ( "type", models.CharField( choices=[("HOME", "Home"), ("ANALYTICS", "Analytics")], max_length=254, verbose_name="Type", ), ), ], options={ "verbose_name": "Page", "verbose_name_plural": "Pages" }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name="PageSection", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "page", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="sections", to="pages.Page", ), ), ], options={ "verbose_name": "Page section", "verbose_name_plural": "Page sections", }, bases=(parler.models.TranslatableModelMixin, models.Model), ), migrations.CreateModel( name="PageTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language"), ), ("title", models.CharField(max_length=254, verbose_name="Title")), ( "slug", models.SlugField(max_length=254, unique=True, verbose_name="Slug"), ), ( "description", models.CharField(blank=True, max_length=1000, verbose_name="Description"), ), ( "background", models.FileField(upload_to="", verbose_name="Background image"), ), ( "master", parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="pages.Page", ), ), ], options={ "verbose_name": "Page Translation", "db_table": "pages_page_translation", "db_tablespace": "", "managed": True, "default_permissions": (), "unique_together": {("language_code", "master")}, }, bases=(parler.models.TranslatedFieldsModelMixin, models.Model), ), migrations.CreateModel( name="PageSectionTranslation", fields=[ ( "id", models.AutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "language_code", models.CharField(db_index=True, max_length=15, verbose_name="Language"), ), ("image", models.FileField(upload_to="", verbose_name="Image")), ("text", models.TextField()), ( "image_position", models.CharField( choices=[("LEFT", "Left"), ("RIGHT", "Right")], default="RIGHT", max_length=254, verbose_name="Image position", ), ), ( "master", parler.fields.TranslationsForeignKey( editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="translations", to="pages.PageSection", ), ), ], options={ "verbose_name": "Page section Translation", "db_table": "pages_pagesection_translation", "db_tablespace": "", "managed": True, "default_permissions": (), "unique_together": {("language_code", "master")}, }, bases=(parler.models.TranslatedFieldsModelMixin, models.Model), ), ]