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

1# Generated by Django 5.2.8 on 2025-12-03 12:39 

2 

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 

9 

10 

11class Migration(migrations.Migration): 

12 

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 ] 

19 

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 ]