vkk.migrations.0001_initial

  1# Generated by Django 4.0.4 on 2022-05-23 14:09
  2
  3from django.conf import settings
  4import django.core.validators
  5from django.db import migrations, models
  6import django.db.models.deletion
  7import django.db.models.expressions
  8
  9
 10class Migration(migrations.Migration):
 11
 12    initial = True
 13
 14    dependencies = [
 15    ]
 16
 17    operations = [
 18        migrations.CreateModel(
 19            name='User',
 20            fields=[
 21                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 22                ('password', models.CharField(max_length=128, verbose_name='password')),
 23                ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
 24                ('first_name', models.CharField(max_length=150, verbose_name='first name')),
 25                ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
 26                ('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')),
 27                ('is_accountant', models.BooleanField(default=False, help_text='Designates whether the user can access features reserved for accounting.', verbose_name='accountant status')),
 28                ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
 29            ],
 30            options={
 31                'verbose_name': 'user',
 32                'verbose_name_plural': 'users',
 33                'default_permissions': (),
 34            },
 35        ),
 36        migrations.CreateModel(
 37            name='Announcement',
 38            fields=[
 39                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 40                ('message', models.TextField(help_text='Long messages may negativly impact overall website usabillity.', verbose_name='message')),
 41                ('is_active', models.BooleanField(default=False, verbose_name='active')),
 42            ],
 43            options={
 44                'verbose_name': 'announcement',
 45                'verbose_name_plural': 'announcements',
 46                'default_permissions': (),
 47            },
 48        ),
 49        migrations.CreateModel(
 50            name='Department',
 51            fields=[
 52                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 53                ('name', models.CharField(max_length=255, verbose_name='name')),
 54                ('accounting_entry', models.CharField(max_length=7, unique=True, verbose_name='accounting entry')),
 55            ],
 56            options={
 57                'verbose_name': 'department',
 58                'verbose_name_plural': 'departments',
 59                'default_permissions': (),
 60            },
 61        ),
 62        migrations.CreateModel(
 63            name='NewUser',
 64            fields=[
 65                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 66                ('token', models.SlugField(unique=True, verbose_name='token')),
 67                ('expiration_date', models.DateField(help_text='Date after which the generated token will be expired.', verbose_name='expiration date')),
 68            ],
 69            options={
 70                'verbose_name': 'new user',
 71                'verbose_name_plural': 'new users',
 72                'default_permissions': (),
 73            },
 74        ),
 75        migrations.CreateModel(
 76            name='Period',
 77            fields=[
 78                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 79                ('start', models.DateField(verbose_name='start date')),
 80                ('end', models.DateField(verbose_name='end date')),
 81                ('dead_line', models.DateTimeField(verbose_name='dead line')),
 82                ('dead_line_final', models.DateTimeField(verbose_name='final dead line')),
 83            ],
 84            options={
 85                'verbose_name': 'period',
 86                'verbose_name_plural': 'periods',
 87                'get_latest_by': 'start',
 88                'default_permissions': (),
 89            },
 90        ),
 91        migrations.CreateModel(
 92            name='Project',
 93            fields=[
 94                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 95                ('invoice_number', models.IntegerField(help_text='Identifier for invoice as number between 20000000 and 39999999.', unique=True, validators=[django.core.validators.MinValueValidator(20000000), django.core.validators.MaxValueValidator(39999999)], verbose_name='invoice number')),
 96                ('name', models.CharField(max_length=255, verbose_name='name')),
 97                ('contractor', models.CharField(max_length=255, verbose_name='contractor')),
 98                ('start', models.DateField(verbose_name='start date')),
 99                ('end', models.DateField(verbose_name='end date')),
100                ('department', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='vkk.department')),
101            ],
102            options={
103                'verbose_name': 'project',
104                'verbose_name_plural': 'projects',
105                'default_permissions': (),
106            },
107        ),
108        migrations.CreateModel(
109            name='ProjectAssignment',
110            fields=[
111                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
112                ('contributor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='contributor')),
113                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vkk.project', verbose_name='project')),
114            ],
115            options={
116                'verbose_name': 'project assignment',
117                'verbose_name_plural': 'project assignments',
118                'default_permissions': (),
119            },
120        ),
121        migrations.CreateModel(
122            name='SalaryLevel',
123            fields=[
124                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
125                ('salary_code', models.CharField(max_length=15, unique=True, verbose_name='salary code')),
126            ],
127            options={
128                'verbose_name': 'salary level',
129                'verbose_name_plural': 'salary levels',
130                'default_permissions': (),
131            },
132        ),
133        migrations.CreateModel(
134            name='WorkHoursCorrection',
135            fields=[
136                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
137                ('ammount', models.DecimalField(decimal_places=2, help_text='Ammount by which the total number of workhoursfor a given project assignment and period should be corrected.', max_digits=5)),
138                ('period', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='vkk.period', verbose_name='period')),
139                ('project_assignment', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='vkk.projectassignment', verbose_name='project assignment')),
140            ],
141            options={
142                'verbose_name': 'work hours correction',
143                'verbose_name_plural': 'work hours correction',
144                'default_permissions': (),
145            },
146        ),
147        migrations.CreateModel(
148            name='WorkHours',
149            fields=[
150                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
151                ('day', models.DateField(help_text='Date of work day.', verbose_name='work day')),
152                ('hours', models.DecimalField(decimal_places=2, help_text='Number of hours worked with precision up to two decimal places.', max_digits=4, validators=[django.core.validators.MinValueValidator(0.01), django.core.validators.MaxValueValidator(24)], verbose_name='work hours')),
153                ('period', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='vkk.period', verbose_name='period')),
154                ('project_assignment', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='vkk.projectassignment', verbose_name='project assignment')),
155            ],
156            options={
157                'verbose_name': 'work hours',
158                'verbose_name_plural': 'work hours',
159                'default_permissions': (),
160            },
161        ),
162        migrations.CreateModel(
163            name='ProjectManager',
164            fields=[
165                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
166                ('start', models.DateField(verbose_name='start date')),
167                ('end', models.DateField(verbose_name='end date')),
168                ('is_proxy', models.BooleanField(default=False, help_text='Designates whether management rights are given to the userfor administrative uses only.', verbose_name='proxy')),
169                ('manager', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='manager')),
170                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vkk.project', verbose_name='project')),
171            ],
172            options={
173                'verbose_name': 'project manager',
174                'verbose_name_plural': 'project managers',
175                'default_permissions': (),
176            },
177        ),
178        migrations.AddField(
179            model_name='projectassignment',
180            name='salary_level',
181            field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='vkk.salarylevel', verbose_name='salary level'),
182        ),
183        migrations.CreateModel(
184            name='PeriodClosure',
185            fields=[
186                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
187                ('is_closed', models.BooleanField(default=False, verbose_name='closed')),
188                ('period', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vkk.period', verbose_name='period')),
189                ('project_assignment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vkk.projectassignment', verbose_name='project assignment')),
190            ],
191            options={
192                'verbose_name': 'period',
193                'verbose_name_plural': 'periods',
194                'default_permissions': (),
195            },
196        ),
197        migrations.AddConstraint(
198            model_name='period',
199            constraint=models.CheckConstraint(check=models.Q(('start__lte', django.db.models.expressions.F('end'))), name='runtime_check_period'),
200        ),
201        migrations.AddConstraint(
202            model_name='period',
203            constraint=models.CheckConstraint(check=models.Q(('end__lte', django.db.models.expressions.F('dead_line'))), name='dead_line_check_period'),
204        ),
205        migrations.AddConstraint(
206            model_name='period',
207            constraint=models.CheckConstraint(check=models.Q(('dead_line__lte', django.db.models.expressions.F('dead_line_final'))), name='dead_line_final_check_period'),
208        ),
209        migrations.AddField(
210            model_name='newuser',
211            name='user',
212            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user'),
213        ),
214        migrations.AddConstraint(
215            model_name='workhourscorrection',
216            constraint=models.UniqueConstraint(fields=('project_assignment', 'period'), name='unique_constraint_work_hours_correction'),
217        ),
218        migrations.AddConstraint(
219            model_name='workhours',
220            constraint=models.UniqueConstraint(fields=('project_assignment', 'day'), name='unique_constraint_work_hours'),
221        ),
222        migrations.AddConstraint(
223            model_name='workhours',
224            constraint=models.CheckConstraint(check=models.Q(('hours__gt', 0.0)), name='min_work_hours'),
225        ),
226        migrations.AddConstraint(
227            model_name='workhours',
228            constraint=models.CheckConstraint(check=models.Q(('hours__lte', 24.0)), name='max_work_hours'),
229        ),
230        migrations.AddConstraint(
231            model_name='projectmanager',
232            constraint=models.CheckConstraint(check=models.Q(('start__lte', django.db.models.expressions.F('end'))), name='runtime_check_manager'),
233        ),
234        migrations.AddConstraint(
235            model_name='projectmanager',
236            constraint=models.UniqueConstraint(fields=('manager', 'project'), name='unique_constraint_project_manager'),
237        ),
238        migrations.AddConstraint(
239            model_name='projectassignment',
240            constraint=models.UniqueConstraint(fields=('contributor', 'salary_level', 'project'), name='unique_constraint_project_assignment'),
241        ),
242        migrations.AddConstraint(
243            model_name='project',
244            constraint=models.CheckConstraint(check=models.Q(('start__lte', django.db.models.expressions.F('end'))), name='runtime_check_projekt'),
245        ),
246        migrations.AddConstraint(
247            model_name='project',
248            constraint=models.CheckConstraint(check=models.Q(('invoice_number__gte', 20000000), ('invoice_number__lte', 39999999)), name='invoice_number_intervall_check'),
249        ),
250        migrations.AddConstraint(
251            model_name='periodclosure',
252            constraint=models.UniqueConstraint(fields=('period', 'project_assignment'), name='unique_constraint_period_closure'),
253        ),
254    ]
class Migration(django.db.migrations.migration.Migration):
 11class Migration(migrations.Migration):
 12
 13    initial = True
 14
 15    dependencies = [
 16    ]
 17
 18    operations = [
 19        migrations.CreateModel(
 20            name='User',
 21            fields=[
 22                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 23                ('password', models.CharField(max_length=128, verbose_name='password')),
 24                ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
 25                ('first_name', models.CharField(max_length=150, verbose_name='first name')),
 26                ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
 27                ('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')),
 28                ('is_accountant', models.BooleanField(default=False, help_text='Designates whether the user can access features reserved for accounting.', verbose_name='accountant status')),
 29                ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
 30            ],
 31            options={
 32                'verbose_name': 'user',
 33                'verbose_name_plural': 'users',
 34                'default_permissions': (),
 35            },
 36        ),
 37        migrations.CreateModel(
 38            name='Announcement',
 39            fields=[
 40                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 41                ('message', models.TextField(help_text='Long messages may negativly impact overall website usabillity.', verbose_name='message')),
 42                ('is_active', models.BooleanField(default=False, verbose_name='active')),
 43            ],
 44            options={
 45                'verbose_name': 'announcement',
 46                'verbose_name_plural': 'announcements',
 47                'default_permissions': (),
 48            },
 49        ),
 50        migrations.CreateModel(
 51            name='Department',
 52            fields=[
 53                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 54                ('name', models.CharField(max_length=255, verbose_name='name')),
 55                ('accounting_entry', models.CharField(max_length=7, unique=True, verbose_name='accounting entry')),
 56            ],
 57            options={
 58                'verbose_name': 'department',
 59                'verbose_name_plural': 'departments',
 60                'default_permissions': (),
 61            },
 62        ),
 63        migrations.CreateModel(
 64            name='NewUser',
 65            fields=[
 66                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 67                ('token', models.SlugField(unique=True, verbose_name='token')),
 68                ('expiration_date', models.DateField(help_text='Date after which the generated token will be expired.', verbose_name='expiration date')),
 69            ],
 70            options={
 71                'verbose_name': 'new user',
 72                'verbose_name_plural': 'new users',
 73                'default_permissions': (),
 74            },
 75        ),
 76        migrations.CreateModel(
 77            name='Period',
 78            fields=[
 79                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 80                ('start', models.DateField(verbose_name='start date')),
 81                ('end', models.DateField(verbose_name='end date')),
 82                ('dead_line', models.DateTimeField(verbose_name='dead line')),
 83                ('dead_line_final', models.DateTimeField(verbose_name='final dead line')),
 84            ],
 85            options={
 86                'verbose_name': 'period',
 87                'verbose_name_plural': 'periods',
 88                'get_latest_by': 'start',
 89                'default_permissions': (),
 90            },
 91        ),
 92        migrations.CreateModel(
 93            name='Project',
 94            fields=[
 95                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 96                ('invoice_number', models.IntegerField(help_text='Identifier for invoice as number between 20000000 and 39999999.', unique=True, validators=[django.core.validators.MinValueValidator(20000000), django.core.validators.MaxValueValidator(39999999)], verbose_name='invoice number')),
 97                ('name', models.CharField(max_length=255, verbose_name='name')),
 98                ('contractor', models.CharField(max_length=255, verbose_name='contractor')),
 99                ('start', models.DateField(verbose_name='start date')),
100                ('end', models.DateField(verbose_name='end date')),
101                ('department', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='vkk.department')),
102            ],
103            options={
104                'verbose_name': 'project',
105                'verbose_name_plural': 'projects',
106                'default_permissions': (),
107            },
108        ),
109        migrations.CreateModel(
110            name='ProjectAssignment',
111            fields=[
112                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
113                ('contributor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='contributor')),
114                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vkk.project', verbose_name='project')),
115            ],
116            options={
117                'verbose_name': 'project assignment',
118                'verbose_name_plural': 'project assignments',
119                'default_permissions': (),
120            },
121        ),
122        migrations.CreateModel(
123            name='SalaryLevel',
124            fields=[
125                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
126                ('salary_code', models.CharField(max_length=15, unique=True, verbose_name='salary code')),
127            ],
128            options={
129                'verbose_name': 'salary level',
130                'verbose_name_plural': 'salary levels',
131                'default_permissions': (),
132            },
133        ),
134        migrations.CreateModel(
135            name='WorkHoursCorrection',
136            fields=[
137                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
138                ('ammount', models.DecimalField(decimal_places=2, help_text='Ammount by which the total number of workhoursfor a given project assignment and period should be corrected.', max_digits=5)),
139                ('period', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='vkk.period', verbose_name='period')),
140                ('project_assignment', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='vkk.projectassignment', verbose_name='project assignment')),
141            ],
142            options={
143                'verbose_name': 'work hours correction',
144                'verbose_name_plural': 'work hours correction',
145                'default_permissions': (),
146            },
147        ),
148        migrations.CreateModel(
149            name='WorkHours',
150            fields=[
151                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
152                ('day', models.DateField(help_text='Date of work day.', verbose_name='work day')),
153                ('hours', models.DecimalField(decimal_places=2, help_text='Number of hours worked with precision up to two decimal places.', max_digits=4, validators=[django.core.validators.MinValueValidator(0.01), django.core.validators.MaxValueValidator(24)], verbose_name='work hours')),
154                ('period', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='vkk.period', verbose_name='period')),
155                ('project_assignment', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='vkk.projectassignment', verbose_name='project assignment')),
156            ],
157            options={
158                'verbose_name': 'work hours',
159                'verbose_name_plural': 'work hours',
160                'default_permissions': (),
161            },
162        ),
163        migrations.CreateModel(
164            name='ProjectManager',
165            fields=[
166                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
167                ('start', models.DateField(verbose_name='start date')),
168                ('end', models.DateField(verbose_name='end date')),
169                ('is_proxy', models.BooleanField(default=False, help_text='Designates whether management rights are given to the userfor administrative uses only.', verbose_name='proxy')),
170                ('manager', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='manager')),
171                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vkk.project', verbose_name='project')),
172            ],
173            options={
174                'verbose_name': 'project manager',
175                'verbose_name_plural': 'project managers',
176                'default_permissions': (),
177            },
178        ),
179        migrations.AddField(
180            model_name='projectassignment',
181            name='salary_level',
182            field=models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='vkk.salarylevel', verbose_name='salary level'),
183        ),
184        migrations.CreateModel(
185            name='PeriodClosure',
186            fields=[
187                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
188                ('is_closed', models.BooleanField(default=False, verbose_name='closed')),
189                ('period', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vkk.period', verbose_name='period')),
190                ('project_assignment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='vkk.projectassignment', verbose_name='project assignment')),
191            ],
192            options={
193                'verbose_name': 'period',
194                'verbose_name_plural': 'periods',
195                'default_permissions': (),
196            },
197        ),
198        migrations.AddConstraint(
199            model_name='period',
200            constraint=models.CheckConstraint(check=models.Q(('start__lte', django.db.models.expressions.F('end'))), name='runtime_check_period'),
201        ),
202        migrations.AddConstraint(
203            model_name='period',
204            constraint=models.CheckConstraint(check=models.Q(('end__lte', django.db.models.expressions.F('dead_line'))), name='dead_line_check_period'),
205        ),
206        migrations.AddConstraint(
207            model_name='period',
208            constraint=models.CheckConstraint(check=models.Q(('dead_line__lte', django.db.models.expressions.F('dead_line_final'))), name='dead_line_final_check_period'),
209        ),
210        migrations.AddField(
211            model_name='newuser',
212            name='user',
213            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='user'),
214        ),
215        migrations.AddConstraint(
216            model_name='workhourscorrection',
217            constraint=models.UniqueConstraint(fields=('project_assignment', 'period'), name='unique_constraint_work_hours_correction'),
218        ),
219        migrations.AddConstraint(
220            model_name='workhours',
221            constraint=models.UniqueConstraint(fields=('project_assignment', 'day'), name='unique_constraint_work_hours'),
222        ),
223        migrations.AddConstraint(
224            model_name='workhours',
225            constraint=models.CheckConstraint(check=models.Q(('hours__gt', 0.0)), name='min_work_hours'),
226        ),
227        migrations.AddConstraint(
228            model_name='workhours',
229            constraint=models.CheckConstraint(check=models.Q(('hours__lte', 24.0)), name='max_work_hours'),
230        ),
231        migrations.AddConstraint(
232            model_name='projectmanager',
233            constraint=models.CheckConstraint(check=models.Q(('start__lte', django.db.models.expressions.F('end'))), name='runtime_check_manager'),
234        ),
235        migrations.AddConstraint(
236            model_name='projectmanager',
237            constraint=models.UniqueConstraint(fields=('manager', 'project'), name='unique_constraint_project_manager'),
238        ),
239        migrations.AddConstraint(
240            model_name='projectassignment',
241            constraint=models.UniqueConstraint(fields=('contributor', 'salary_level', 'project'), name='unique_constraint_project_assignment'),
242        ),
243        migrations.AddConstraint(
244            model_name='project',
245            constraint=models.CheckConstraint(check=models.Q(('start__lte', django.db.models.expressions.F('end'))), name='runtime_check_projekt'),
246        ),
247        migrations.AddConstraint(
248            model_name='project',
249            constraint=models.CheckConstraint(check=models.Q(('invoice_number__gte', 20000000), ('invoice_number__lte', 39999999)), name='invoice_number_intervall_check'),
250        ),
251        migrations.AddConstraint(
252            model_name='periodclosure',
253            constraint=models.UniqueConstraint(fields=('period', 'project_assignment'), name='unique_constraint_period_closure'),
254        ),
255    ]

The base class for all migrations.

Migration files will import this from django.db.migrations.Migration and subclass it as a class called Migration. It will have one or more of the following attributes:

  • operations: A list of Operation instances, probably from django.db.migrations.operations
  • dependencies: A list of tuples of (app_path, migration_name)
  • run_before: A list of tuples of (app_path, migration_name)
  • replaces: A list of migration_names

Note that all migrations come out of migrations and into the Loader or Graph as instances, having been initialized with their app label and name.

Inherited Members
django.db.migrations.migration.Migration
Migration
mutate_state
apply
unapply
suggest_name