Coverage for src/backend/InvenTree/users/migrations/0014_userprofile.py: 85%

11 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 17:47 +0000

1# Generated by Django 4.2.19 on 2025-03-03 00:43 

2 

3from django.conf import settings 

4from django.db import migrations, models 

5import django.db.models.deletion 

6 

7def backfill_user_profiles(apps, schema_editor): 

8 User = apps.get_model('auth', 'User') 

9 UserProfile = apps.get_model('users', 'UserProfile') 

10 for user in User.objects.all(): 10 ↛ 11line 10 didn't jump to line 11 because the loop on line 10 never started

11 UserProfile.objects.get_or_create(user=user) 

12 

13 

14class Migration(migrations.Migration): 

15 

16 dependencies = [ 

17 migrations.swappable_dependency(settings.AUTH_USER_MODEL), 

18 ("auth", "0012_alter_user_first_name_max_length"), 

19 ("users", "0013_migrate_mfa_20240408_1659"), 

20 ] 

21 

22 operations = [ 

23 migrations.CreateModel( 

24 name="UserProfile", 

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 "language", 

46 models.CharField( 

47 blank=True, 

48 help_text="Preferred language for the user", 

49 max_length=10, 

50 null=True, 

51 verbose_name="Language", 

52 ), 

53 ), 

54 ( 

55 "theme", 

56 models.JSONField( 

57 blank=True, 

58 help_text="Settings for the web UI as JSON - do not edit manually!", 

59 null=True, 

60 verbose_name="Theme", 

61 ), 

62 ), 

63 ( 

64 "widgets", 

65 models.JSONField( 

66 blank=True, 

67 help_text="Settings for the dashboard widgets as JSON - do not edit manually!", 

68 null=True, 

69 verbose_name="Widgets", 

70 ), 

71 ), 

72 ( 

73 "displayname", 

74 models.CharField( 

75 blank=True, 

76 help_text="Chosen display name for the user", 

77 max_length=255, 

78 null=True, 

79 verbose_name="Display Name", 

80 ), 

81 ), 

82 ( 

83 "position", 

84 models.CharField( 

85 blank=True, 

86 help_text="Main job title or position", 

87 max_length=255, 

88 null=True, 

89 verbose_name="Position", 

90 ), 

91 ), 

92 ( 

93 "status", 

94 models.CharField( 

95 blank=True, 

96 help_text="User status message", 

97 max_length=2000, 

98 null=True, 

99 verbose_name="Status", 

100 ), 

101 ), 

102 ( 

103 "location", 

104 models.CharField( 

105 blank=True, 

106 help_text="User location information", 

107 max_length=2000, 

108 null=True, 

109 verbose_name="Location", 

110 ), 

111 ), 

112 ( 

113 "active", 

114 models.BooleanField( 

115 default=True, 

116 help_text="User is actively using the system", 

117 verbose_name="Active", 

118 ), 

119 ), 

120 ( 

121 "contact", 

122 models.CharField( 

123 blank=True, 

124 help_text="Preferred contact information for the user", 

125 max_length=255, 

126 null=True, 

127 verbose_name="Contact", 

128 ), 

129 ), 

130 ( 

131 "type", 

132 models.CharField( 

133 choices=[ 

134 ("bot", "Bot"), 

135 ("internal", "Internal"), 

136 ("external", "External"), 

137 ("guest", "Guest"), 

138 ], 

139 default="internal", 

140 help_text="Which type of user is this?", 

141 max_length=10, 

142 verbose_name="Type", 

143 ), 

144 ), 

145 ( 

146 "organisation", 

147 models.CharField( 

148 blank=True, 

149 help_text="Users primary organisation/affiliation", 

150 max_length=255, 

151 null=True, 

152 verbose_name="Organisation", 

153 ), 

154 ), 

155 ( 

156 "primary_group", 

157 models.ForeignKey( 

158 blank=True, 

159 help_text="Primary group for the user", 

160 null=True, 

161 on_delete=django.db.models.deletion.SET_NULL, 

162 related_name="primary_users", 

163 to="auth.group", 

164 verbose_name="Primary Group", 

165 ), 

166 ), 

167 ( 

168 "user", 

169 models.OneToOneField( 

170 on_delete=django.db.models.deletion.CASCADE, 

171 related_name="profile", 

172 to=settings.AUTH_USER_MODEL, 

173 verbose_name="User", 

174 ), 

175 ), 

176 ], 

177 options={ 

178 "abstract": False, 

179 }, 

180 ), 

181 migrations.RunPython(backfill_user_profiles), 

182 ]