Coverage for src/backend/InvenTree/common/migrations/0040_parametertemplate_parameter.py: 100%
9 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 17:47 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 17:47 +0000
1# Generated by Django 5.2.8 on 2025-12-03 12:39
3import InvenTree.models
4import InvenTree.validators
5import django.core.validators
6import django.db.models.deletion
7from django.conf import settings
8from django.db import migrations, models
11class Migration(migrations.Migration):
13 dependencies = [
14 ("common", "0039_emailthread_emailmessage"),
15 ("contenttypes", "0002_remove_content_type_name"),
16 migrations.swappable_dependency(settings.AUTH_USER_MODEL),
17 ("part", "0144_auto_20251203_1045")
18 ]
20 operations = [
21 migrations.SeparateDatabaseAndState(
22 state_operations=[
23 migrations.CreateModel(
24 name="ParameterTemplate",
25 fields=[
26 (
27 "id",
28 models.AutoField(
29 auto_created=True,
30 primary_key=True,
31 serialize=False,
32 verbose_name="ID",
33 ),
34 ),
35 (
36 "metadata",
37 models.JSONField(
38 blank=True,
39 help_text="JSON metadata field, for use by external plugins",
40 null=True,
41 verbose_name="Plugin Metadata",
42 ),
43 ),
44 (
45 "name",
46 models.CharField(
47 help_text="Parameter Name",
48 max_length=100,
49 unique=True,
50 verbose_name="Name",
51 ),
52 ),
53 (
54 "units",
55 models.CharField(
56 blank=True,
57 help_text="Physical units for this parameter",
58 max_length=25,
59 validators=[InvenTree.validators.validate_physical_units],
60 verbose_name="Units",
61 ),
62 ),
63 (
64 "description",
65 models.CharField(
66 blank=True,
67 help_text="Parameter description",
68 max_length=250,
69 verbose_name="Description",
70 ),
71 ),
72 (
73 "checkbox",
74 models.BooleanField(
75 default=False,
76 help_text="Is this parameter a checkbox?",
77 verbose_name="Checkbox",
78 ),
79 ),
80 (
81 "choices",
82 models.CharField(
83 blank=True,
84 help_text="Valid choices for this parameter (comma-separated)",
85 max_length=5000,
86 verbose_name="Choices",
87 ),
88 ),
89 (
90 "enabled",
91 models.BooleanField(
92 default=True,
93 help_text="Is this parameter template enabled?",
94 verbose_name="Enabled",
95 ),
96 ),
97 (
98 "model_type",
99 models.ForeignKey(
100 blank=True,
101 help_text="Target model type for this parameter template",
102 null=True,
103 on_delete=django.db.models.deletion.SET_NULL,
104 to="contenttypes.contenttype",
105 verbose_name="Model type",
106 ),
107 ),
108 (
109 "selectionlist",
110 models.ForeignKey(
111 blank=True,
112 help_text="Selection list for this parameter",
113 null=True,
114 on_delete=django.db.models.deletion.SET_NULL,
115 related_name="templates",
116 to="common.selectionlist",
117 verbose_name="Selection List",
118 ),
119 ),
120 ],
121 options={
122 "verbose_name": "Parameter Template",
123 "verbose_name_plural": "Parameter Templates",
124 "db_table": "part_partparametertemplate",
125 },
126 bases=(
127 InvenTree.models.ContentTypeMixin,
128 InvenTree.models.PluginValidationMixin,
129 models.Model,
130 ),
131 ),
132 ],
133 database_operations=[],
134 ),
135 migrations.SeparateDatabaseAndState(
136 state_operations=[
137 migrations.CreateModel(
138 name="Parameter",
139 fields=[
140 (
141 "id",
142 models.AutoField(
143 auto_created=True,
144 primary_key=True,
145 serialize=False,
146 verbose_name="ID",
147 ),
148 ),
149 (
150 "metadata",
151 models.JSONField(
152 blank=True,
153 help_text="JSON metadata field, for use by external plugins",
154 null=True,
155 verbose_name="Plugin Metadata",
156 ),
157 ),
158 (
159 "updated",
160 models.DateTimeField(
161 blank=True,
162 default=None,
163 help_text="Timestamp of last update",
164 null=True,
165 verbose_name="Updated",
166 ),
167 ),
168 (
169 "model_id",
170 models.PositiveIntegerField(
171 help_text="ID of the target model for this parameter",
172 verbose_name="Model ID",
173 ),
174 ),
175 (
176 "data",
177 models.CharField(
178 help_text="Parameter Value",
179 max_length=500,
180 validators=[django.core.validators.MinLengthValidator(1)],
181 verbose_name="Data",
182 ),
183 ),
184 (
185 "data_numeric",
186 models.FloatField(blank=True, default=None, null=True),
187 ),
188 (
189 "note",
190 models.CharField(
191 blank=True,
192 help_text="Optional note field",
193 max_length=500,
194 verbose_name="Note",
195 ),
196 ),
197 (
198 "model_type",
199 models.ForeignKey(
200 on_delete=django.db.models.deletion.CASCADE,
201 to="contenttypes.contenttype",
202 ),
203 ),
204 (
205 "updated_by",
206 models.ForeignKey(
207 blank=True,
208 help_text="User who last updated this object",
209 null=True,
210 on_delete=django.db.models.deletion.SET_NULL,
211 related_name="%(class)s_updated",
212 to=settings.AUTH_USER_MODEL,
213 verbose_name="Update By",
214 ),
215 ),
216 (
217 "template",
218 models.ForeignKey(
219 help_text="Parameter template",
220 on_delete=django.db.models.deletion.CASCADE,
221 related_name="parameters",
222 to="common.parametertemplate",
223 verbose_name="Template",
224 ),
225 ),
226 ],
227 options={
228 "verbose_name": "Parameter",
229 "verbose_name_plural": "Parameters",
230 "db_table": "part_partparameter",
231 "indexes": [
232 models.Index(
233 fields=["model_type", "model_id"],
234 name="part_partpa_model_t_198c9d_idx",
235 )
236 ],
237 "unique_together": {("model_type", "model_id", "template")},
238 },
239 bases=(
240 InvenTree.models.ContentTypeMixin,
241 InvenTree.models.PluginValidationMixin,
242 models.Model,
243 ),
244 ),
245 ],
246 database_operations=[],
247 ),
248 ]