meta-edc 1.6.3__py3-none-any.whl → 1.6.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {meta_edc-1.6.3.dist-info → meta_edc-1.6.5.dist-info}/METADATA +5 -5
- {meta_edc-1.6.3.dist-info → meta_edc-1.6.5.dist-info}/RECORD +15 -11
- meta_lists/admin.py +6 -0
- meta_lists/list_data.py +5 -0
- meta_lists/migrations/0021_diagnosticdevices.py +88 -0
- meta_lists/models.py +6 -0
- meta_subject/admin/glucose_admin.py +13 -1
- meta_subject/admin/glucose_fbg_admin.py +3 -1
- meta_subject/migrations/0239_glucosefbg_diagnostic_device_and_more.py +39 -0
- meta_subject/migrations/0240_glucose_diagnostic_device_and_more.py +61 -0
- meta_subject/models/diagnostic.py +0 -0
- meta_subject/models/glucose.py +11 -1
- meta_subject/models/glucose_fbg.py +11 -1
- {meta_edc-1.6.3.dist-info → meta_edc-1.6.5.dist-info}/WHEEL +0 -0
- {meta_edc-1.6.3.dist-info → meta_edc-1.6.5.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meta-edc
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.5
|
|
4
4
|
Summary: META Trial EDC (https://www.isrctn.com/ISRCTN76157257)
|
|
5
5
|
Keywords: django,clinicedc,META EDC,EDC,clinical trials,META Trial,ISRCTN76157257
|
|
6
6
|
Author: Erik van Widenfelt, Jonathan Willitts
|
|
@@ -18,7 +18,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
19
|
Requires-Dist: django==5.2.10
|
|
20
20
|
Requires-Dist: celery>=5.6.2
|
|
21
|
-
Requires-Dist: clinicedc==2.3.
|
|
21
|
+
Requires-Dist: clinicedc==2.3.6
|
|
22
22
|
Requires-Dist: edc-he>=1.5.2
|
|
23
23
|
Requires-Dist: edc-microscopy>=1.4.2
|
|
24
24
|
Requires-Dist: edc-mnsi>=1.4.0
|
|
@@ -92,8 +92,8 @@ Assuming you are logged into the account ``myaccount``:
|
|
|
92
92
|
mkdir ~/edc && \
|
|
93
93
|
cd ~/edc && \
|
|
94
94
|
uv venv && \
|
|
95
|
-
uv pip install -U meta-edc==1.6.
|
|
96
|
-
wget https://raw.githubusercontent.com/meta-trial/meta-edc/1.6.
|
|
95
|
+
uv pip install -U meta-edc==1.6.4 && \
|
|
96
|
+
wget https://raw.githubusercontent.com/meta-trial/meta-edc/1.6.4/manage.py && \
|
|
97
97
|
uv pip freeze | grep meta-edc
|
|
98
98
|
|
|
99
99
|
Copy your ``.env`` file to ``~/.etc``.
|
|
@@ -143,7 +143,7 @@ From the above example:
|
|
|
143
143
|
|
|
144
144
|
cd ~/edc && \
|
|
145
145
|
uv venv --clear && \
|
|
146
|
-
uv pip install -U meta-edc==1.6.
|
|
146
|
+
uv pip install -U meta-edc==1.6.4 && \
|
|
147
147
|
wget -O manage.py https://raw.githubusercontent.com/meta-trial/meta-edc/1.1.10/manage.py && \
|
|
148
148
|
uv pip freeze | grep meta-edc && \
|
|
149
149
|
python manage.py check
|
|
@@ -259,10 +259,10 @@ meta_labs/list_data.py,sha256=Cbu8yBpogDno1B10MtC8HCXLRbtxqUGjLxuAjUbyLYg,473
|
|
|
259
259
|
meta_labs/processing_profiles.py,sha256=fRX72FOl2rsnOJYhgup5QacfGSXKtWqn2gD3Giz2GDA,500
|
|
260
260
|
meta_labs/reportables.py,sha256=DB8jyeTHWuRz3ZPCnevLjTuqnsSpFKsrgYJ0XDNVZzU,2201
|
|
261
261
|
meta_lists/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
262
|
-
meta_lists/admin.py,sha256=
|
|
262
|
+
meta_lists/admin.py,sha256=_Ww9dkT8BiXwbBFAAUuFYjsWmrF22FEVyR_8E5FsH_g,2318
|
|
263
263
|
meta_lists/admin_site.py,sha256=M4uorELumZDIKD8SHs-AEX1doQFqXhRy-eCcRWYEu9k,165
|
|
264
264
|
meta_lists/apps.py,sha256=aegHpyrHw188UxhNVFd-v35HP9wO7J7G9BYmliOOE0c,278
|
|
265
|
-
meta_lists/list_data.py,sha256=
|
|
265
|
+
meta_lists/list_data.py,sha256=i9JsXMsWImB9ajvS31hyiDu2omtjwm0oOXAq0WZvrPw,10014
|
|
266
266
|
meta_lists/migrations/0001_initial.py,sha256=87crhJGEUzUxe9TaNTzzKM6AjE3Pjw032PkhYrnRz9k,13881
|
|
267
267
|
meta_lists/migrations/0002_auto_20191026_2231.py,sha256=lV7keU3h-MC7O_RJLYxSY_Gr2T7ROtCf0qm_WkS2s3g,4608
|
|
268
268
|
meta_lists/migrations/0003_auto_20191102_0033.py,sha256=LkLUHM5zTj6vg3l1997g57uhncZPLHW-jrJgiUSe6rM,2555
|
|
@@ -283,8 +283,9 @@ meta_lists/migrations/0017_complications_dmmedications_dmtreatments_and_more.py,
|
|
|
283
283
|
meta_lists/migrations/0018_missedreferralreasons.py,sha256=E_-Jrkwz_nAc3SND6EPdkWKeobi6q308J--mDM8JgHA,2639
|
|
284
284
|
meta_lists/migrations/0019_auto_20250128_0143.py,sha256=NtS06qHmBQnoGZhZTR-OAfmoyllmMAyyTozXGl1JdbM,1577
|
|
285
285
|
meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py,sha256=exhYddnIS8101GWd7o_9Z_pqzU99KoYhuIgwu5INGWI,12991
|
|
286
|
+
meta_lists/migrations/0021_diagnosticdevices.py,sha256=S5_GodQ789ouStyZf08d4hEk-9lvYCli_8MCUx77fRE,2918
|
|
286
287
|
meta_lists/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
287
|
-
meta_lists/models.py,sha256=
|
|
288
|
+
meta_lists/models.py,sha256=Z12cgQl8lKSX9HiyOaov24ywpTh8ZIx1MHHGpinSSfs,3206
|
|
288
289
|
meta_lists/urls.py,sha256=9NCrRvdkPXzH3L7VMCa0iQnz-j5tujzhvvtRRAGunV8,204
|
|
289
290
|
meta_pharmacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
290
291
|
meta_pharmacy/admin/__init__.py,sha256=oR5RGRlUqHN0kZMuW8j1n5f2e7akQMZR6hj9TuLlaTY,138
|
|
@@ -747,8 +748,8 @@ meta_subject/admin/fields.py,sha256=wlKr_x8-PWL4urv6N0L4ti5yG3D7FnLy2U_hH6Baqzc,
|
|
|
747
748
|
meta_subject/admin/fieldsets.py,sha256=NjFKDAMvzePa9TijR_-zTLsDbawfBQDuws2BzWDzeZQ,1516
|
|
748
749
|
meta_subject/admin/followup_examination_admin.py,sha256=nNFQvW_zipgJCd1RDa2A2UOQkcPIq8cirwM2f3Ih0ZY,5278
|
|
749
750
|
meta_subject/admin/followup_vitals_admin.py,sha256=a2bwBwFsQ1sMmnBgmeCOEv6wNCXuKeIqIwEZB-Lqt_E,2297
|
|
750
|
-
meta_subject/admin/glucose_admin.py,sha256=
|
|
751
|
-
meta_subject/admin/glucose_fbg_admin.py,sha256=
|
|
751
|
+
meta_subject/admin/glucose_admin.py,sha256=76j7mGttcJEn4R-futfUt7LDiBFE3ffR_DnIqNzUwmE,3332
|
|
752
|
+
meta_subject/admin/glucose_fbg_admin.py,sha256=O5GaNjBR0bZQcbbw1ZrgWHzcRCWRA8viNkOfwk1fVSk,2964
|
|
752
753
|
meta_subject/admin/health_economics/__init__.py,sha256=t0vFauE3auk7FESIvk5tFjc3-Jtshl9eiAJswQBG1gw,212
|
|
753
754
|
meta_subject/admin/health_economics/health_economics_simple_admin.py,sha256=nL0CvjWQsFsR19ine14iItt9e8Px53Ln_tSppMN8UQ4,1053
|
|
754
755
|
meta_subject/admin/health_economics/health_economics_update_admin.py,sha256=mtsd1fJ8yvTK1eol5f03fZ8jk1afeYKSxEydPGmma7w,3905
|
|
@@ -1081,6 +1082,8 @@ meta_subject/migrations/0235_glucosefbg_endpoint_today_and_more.py,sha256=ctq-Np
|
|
|
1081
1082
|
meta_subject/migrations/0236_alter_historicalhivexitreview_other_current_arv_regimen_and_more.py,sha256=YU8IC-nONmzwV6jJ3P-f5jpp9HUEMyKKhRpWgl8HjHo,1883
|
|
1082
1083
|
meta_subject/migrations/0237_historicalhivexitreview_singleton_field_and_more.py,sha256=V_6u5YMGCRYgwrwqJpQam53fZcYWHHWDRWBhPtTkTuw,2115
|
|
1083
1084
|
meta_subject/migrations/0238_historicalhivexitreview_available_and_more.py,sha256=r2kSbcMSbKzQswJSfMP1CqRAZSdDayHjjQzsv6p-D3I,2900
|
|
1085
|
+
meta_subject/migrations/0239_glucosefbg_diagnostic_device_and_more.py,sha256=SIU3VMAIOwwvYtKOx6MmHlyAX6QnWi5VC9wtib-OVcI,1220
|
|
1086
|
+
meta_subject/migrations/0240_glucose_diagnostic_device_and_more.py,sha256=GzJJSbGU4cHvkRRZQyB94Gfiu8nKJyBJjZQkp2XTcig,2111
|
|
1084
1087
|
meta_subject/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1085
1088
|
meta_subject/model_mixins/__init__.py,sha256=2Dae7t4r2f3YubLevk_HH_GVTDrZREOpCDDMYthLV5U,522
|
|
1086
1089
|
meta_subject/model_mixins/arv_history_model_mixin.py,sha256=Ync4oLFng1OQW3pVxNxbEhKplWVNpUY5BiXy47lv6pk,1573
|
|
@@ -1106,13 +1109,14 @@ meta_subject/models/delivery.py,sha256=IMMrTtWrMtBL2Kn8jJ4ACkGE0RYq4sAxym46zL0Bn
|
|
|
1106
1109
|
meta_subject/models/diabetes/__init__.py,sha256=jJi8M56-D4jVx3Q6fkDqMWg9XfeJOw_l6Ge864OyNSA,112
|
|
1107
1110
|
meta_subject/models/diabetes/dm_endpoint.py,sha256=DPfLru5u6wBbu_JiEyrRJRbmcF5nKox0U4A07dRNayY,1846
|
|
1108
1111
|
meta_subject/models/diabetes/dm_followup.py,sha256=n1KqEkt38vxJDXVEsdffjD2A1YOxGM31m_HdgZWpuLc,6414
|
|
1112
|
+
meta_subject/models/diagnostic.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1109
1113
|
meta_subject/models/diet_and_lifestyle.py,sha256=4QVNVyF813AC9Rp2xm3Gr3nRtHSZmCsuGx0PWOcMpuc,1061
|
|
1110
1114
|
meta_subject/models/egfr_drop_notification.py,sha256=LSA0s4klzQ69CwPDI_q89eQ49XbcBOQ-Q21IEyXdgOk,557
|
|
1111
1115
|
meta_subject/models/eq5d3l.py,sha256=itRrbfzL7Jsg9u7ml0SXwsw4nMoMcNyG0-YCD2VeXB0,291
|
|
1112
1116
|
meta_subject/models/followup_examination.py,sha256=ZNapm_-fofIQiWZtWbtVnmSY4NJ3OdktmY_16rVxvrs,8072
|
|
1113
1117
|
meta_subject/models/followup_vitals.py,sha256=pBZt4xrw7eVUfHBRtotUh9orJdNjOGxSuNa6JeWQRqA,903
|
|
1114
|
-
meta_subject/models/glucose.py,sha256=
|
|
1115
|
-
meta_subject/models/glucose_fbg.py,sha256=
|
|
1118
|
+
meta_subject/models/glucose.py,sha256=X4ujhc71RHINwFaoN1JrpwiGNkGOnJFQwr_u-WXaA-4,2526
|
|
1119
|
+
meta_subject/models/glucose_fbg.py,sha256=T4jFKB3LeEZ0ujjMEH670-fHrWRSAmfpBgWM6PG17c4,2381
|
|
1116
1120
|
meta_subject/models/glucose_review.py,sha256=bCnSBe_C3LeBy1XrZpV9rv-hOk8onZ_Tl37t7dqm-sw,450
|
|
1117
1121
|
meta_subject/models/health_economics/__init__.py,sha256=J557vTjzK1EvUAM4mx9zDVQ7Zr0W25stnWXz_zE2a-c,245
|
|
1118
1122
|
meta_subject/models/health_economics/health_economics.py,sha256=lZE6sMmYQTPjz9QbXZ2rznlbgW61G0JYYIQ07IueJvw,9705
|
|
@@ -1158,7 +1162,7 @@ meta_visit_schedule/visit_schedules/phase_three/schedule.py,sha256=LO9HqV6r_LUEY
|
|
|
1158
1162
|
meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py,sha256=q12p5wXc2D7lSiJVBnoSQw8Q3vL6uDx1t3PuDJO-Z-U,1735
|
|
1159
1163
|
meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py,sha256=bEpbpCX3vfZmnsqudr0z8PU5kiaX4ws1sO5Im98Mo28,1106
|
|
1160
1164
|
meta_visit_schedule/visit_schedules/phase_three/visit_schedule.py,sha256=ak4qazeKlpIlvpqrK9hDDO0fwWuWyvb4Ec-JU31IJxc,654
|
|
1161
|
-
meta_edc-1.6.
|
|
1162
|
-
meta_edc-1.6.
|
|
1163
|
-
meta_edc-1.6.
|
|
1164
|
-
meta_edc-1.6.
|
|
1165
|
+
meta_edc-1.6.5.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
1166
|
+
meta_edc-1.6.5.dist-info/WHEEL,sha256=XV0cjMrO7zXhVAIyyc8aFf1VjZ33Fen4IiJk5zFlC3g,80
|
|
1167
|
+
meta_edc-1.6.5.dist-info/METADATA,sha256=5hB7Sx67nWaeOpC-tD1v8e1o1WbvyRfZnDEZ1HXwd44,5260
|
|
1168
|
+
meta_edc-1.6.5.dist-info/RECORD,,
|
meta_lists/admin.py
CHANGED
|
@@ -7,6 +7,7 @@ from .models import (
|
|
|
7
7
|
BaselineSymptoms,
|
|
8
8
|
Complications,
|
|
9
9
|
DiabetesSymptoms,
|
|
10
|
+
DiagnosticDevices,
|
|
10
11
|
DmMedications,
|
|
11
12
|
DmTreatments,
|
|
12
13
|
HealthcareWorkers,
|
|
@@ -82,3 +83,8 @@ class InvestigationsAdmin(ListModelAdminMixin, admin.ModelAdmin):
|
|
|
82
83
|
@admin.register(HealthcareWorkers, site=meta_lists_admin)
|
|
83
84
|
class HealthcareWorkersAdmin(ListModelAdminMixin, admin.ModelAdmin):
|
|
84
85
|
pass
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@admin.register(DiagnosticDevices, site=meta_lists_admin)
|
|
89
|
+
class DiagnosticDevicesAdmin(ListModelAdminMixin, admin.ModelAdmin):
|
|
90
|
+
pass
|
meta_lists/list_data.py
CHANGED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Generated by Django 5.2.10 on 2026-01-22 19:43
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
(
|
|
10
|
+
"meta_lists",
|
|
11
|
+
"0020_alter_abnormalfootappearanceobservations_extra_value_and_more",
|
|
12
|
+
),
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
operations = [
|
|
16
|
+
migrations.CreateModel(
|
|
17
|
+
name="DiagnosticDevices",
|
|
18
|
+
fields=[
|
|
19
|
+
(
|
|
20
|
+
"name",
|
|
21
|
+
models.CharField(
|
|
22
|
+
help_text="This is the stored value, required",
|
|
23
|
+
max_length=250,
|
|
24
|
+
unique=True,
|
|
25
|
+
verbose_name="Stored value",
|
|
26
|
+
),
|
|
27
|
+
),
|
|
28
|
+
(
|
|
29
|
+
"plural_name",
|
|
30
|
+
models.CharField(
|
|
31
|
+
default="", max_length=250, verbose_name="Plural name"
|
|
32
|
+
),
|
|
33
|
+
),
|
|
34
|
+
(
|
|
35
|
+
"display_name",
|
|
36
|
+
models.CharField(
|
|
37
|
+
help_text="(suggest 40 characters max.)",
|
|
38
|
+
max_length=250,
|
|
39
|
+
unique=True,
|
|
40
|
+
verbose_name="Name",
|
|
41
|
+
),
|
|
42
|
+
),
|
|
43
|
+
(
|
|
44
|
+
"display_index",
|
|
45
|
+
models.IntegerField(
|
|
46
|
+
default=0,
|
|
47
|
+
help_text="Index to control display order if not alphabetical, not required",
|
|
48
|
+
verbose_name="display index",
|
|
49
|
+
),
|
|
50
|
+
),
|
|
51
|
+
(
|
|
52
|
+
"field_name",
|
|
53
|
+
models.CharField(
|
|
54
|
+
blank=True,
|
|
55
|
+
default="",
|
|
56
|
+
editable=False,
|
|
57
|
+
help_text="Not required",
|
|
58
|
+
max_length=25,
|
|
59
|
+
),
|
|
60
|
+
),
|
|
61
|
+
("extra_value", models.CharField(default="", max_length=250)),
|
|
62
|
+
(
|
|
63
|
+
"version",
|
|
64
|
+
models.CharField(default="1.0", editable=False, max_length=35),
|
|
65
|
+
),
|
|
66
|
+
("id", models.AutoField(primary_key=True, serialize=False)),
|
|
67
|
+
],
|
|
68
|
+
options={
|
|
69
|
+
"verbose_name": "Diagnostic device",
|
|
70
|
+
"verbose_name_plural": "Diagnostic devices",
|
|
71
|
+
"abstract": False,
|
|
72
|
+
"default_permissions": (
|
|
73
|
+
"add",
|
|
74
|
+
"change",
|
|
75
|
+
"delete",
|
|
76
|
+
"view",
|
|
77
|
+
"export",
|
|
78
|
+
"import",
|
|
79
|
+
),
|
|
80
|
+
"indexes": [
|
|
81
|
+
models.Index(
|
|
82
|
+
fields=["display_index", "display_name"],
|
|
83
|
+
name="meta_lists__display_e9a915_idx",
|
|
84
|
+
)
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
),
|
|
88
|
+
]
|
meta_lists/models.py
CHANGED
|
@@ -101,3 +101,9 @@ class MissedReferralReasons(ListModelMixin):
|
|
|
101
101
|
class Meta(ListModelMixin.Meta):
|
|
102
102
|
verbose_name = "Missed Referral Reasons"
|
|
103
103
|
verbose_name_plural = "Missed Referral Reasons"
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class DiagnosticDevices(ListModelMixin):
|
|
107
|
+
class Meta(ListModelMixin.Meta):
|
|
108
|
+
verbose_name = "Diagnostic device"
|
|
109
|
+
verbose_name_plural = "Diagnostic devices"
|
|
@@ -38,6 +38,7 @@ class GlucoseAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
38
38
|
"fbg_datetime",
|
|
39
39
|
"fbg_value",
|
|
40
40
|
"fbg_units",
|
|
41
|
+
"diagnostic_device",
|
|
41
42
|
)
|
|
42
43
|
},
|
|
43
44
|
),
|
|
@@ -77,18 +78,29 @@ class GlucoseAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
77
78
|
"ogtt_performed": admin.VERTICAL,
|
|
78
79
|
"ogtt_units": admin.VERTICAL,
|
|
79
80
|
"endpoint_today": admin.VERTICAL,
|
|
81
|
+
"diagnostic_device": admin.VERTICAL,
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
def get_list_display(self, request) -> tuple[str, ...]:
|
|
83
85
|
list_display = super().get_list_display(request)
|
|
84
86
|
list_display = list(list_display)
|
|
85
|
-
list_display.insert(3, "
|
|
87
|
+
list_display.insert(3, "ogtt")
|
|
86
88
|
list_display.insert(3, "fbg_value")
|
|
89
|
+
list_display = [f for f in list_display if f != "__str__"]
|
|
87
90
|
return tuple(list_display)
|
|
88
91
|
|
|
89
92
|
def get_list_filter(self, request) -> tuple[str | type[SimpleListFilter], ...]:
|
|
90
93
|
list_filter = super().get_list_filter(request)
|
|
91
94
|
list_filter = list(list_filter)
|
|
95
|
+
list_filter.insert(2, "diagnostic_device")
|
|
92
96
|
list_filter.insert(2, OgttListFilter)
|
|
93
97
|
list_filter.insert(2, FbgListFilter)
|
|
94
98
|
return tuple(list_filter)
|
|
99
|
+
|
|
100
|
+
@admin.display(description="FBG", ordering="fbg_value")
|
|
101
|
+
def fbg(self, obj):
|
|
102
|
+
return obj.fbg_value
|
|
103
|
+
|
|
104
|
+
@admin.display(description="OGTT", ordering="ogtt_value")
|
|
105
|
+
def ogtt(self, obj):
|
|
106
|
+
return obj.ogtt_value
|
|
@@ -38,6 +38,7 @@ class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
38
38
|
"fbg_datetime",
|
|
39
39
|
"fbg_value",
|
|
40
40
|
"fbg_units",
|
|
41
|
+
"diagnostic_device",
|
|
41
42
|
)
|
|
42
43
|
},
|
|
43
44
|
),
|
|
@@ -70,6 +71,7 @@ class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
70
71
|
"fbg_units": admin.VERTICAL,
|
|
71
72
|
"fbg_performed": admin.VERTICAL,
|
|
72
73
|
"endpoint_today": admin.VERTICAL,
|
|
74
|
+
"diagnostic_device": admin.VERTICAL,
|
|
73
75
|
}
|
|
74
76
|
|
|
75
77
|
@admin.display(description="FBG", ordering="fbg_value")
|
|
@@ -79,8 +81,8 @@ class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
79
81
|
def get_list_display(self, request) -> tuple[str, ...]:
|
|
80
82
|
list_display = super().get_list_display(request)
|
|
81
83
|
list_display = list(list_display)
|
|
82
|
-
# list_display.insert(3, "ogtt")
|
|
83
84
|
list_display.insert(3, "fbg")
|
|
85
|
+
list_display = [f for f in list_display if f != "__str__"]
|
|
84
86
|
return tuple(list_display)
|
|
85
87
|
|
|
86
88
|
def get_list_filter(self, request) -> tuple[str | type[SimpleListFilter], ...]:
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Generated by Django 5.2.10 on 2026-01-22 19:43
|
|
2
|
+
|
|
3
|
+
import django.db.models.deletion
|
|
4
|
+
from django.db import migrations, models
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
("meta_lists", "0021_diagnosticdevices"),
|
|
11
|
+
("meta_subject", "0238_historicalhivexitreview_available_and_more"),
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
operations = [
|
|
15
|
+
migrations.AddField(
|
|
16
|
+
model_name="glucosefbg",
|
|
17
|
+
name="diagnostic_device",
|
|
18
|
+
field=models.ForeignKey(
|
|
19
|
+
blank=True,
|
|
20
|
+
limit_choices_to={"name__icontains": "FBG"},
|
|
21
|
+
null=True,
|
|
22
|
+
on_delete=django.db.models.deletion.PROTECT,
|
|
23
|
+
to="meta_lists.diagnosticdevices",
|
|
24
|
+
),
|
|
25
|
+
),
|
|
26
|
+
migrations.AddField(
|
|
27
|
+
model_name="historicalglucosefbg",
|
|
28
|
+
name="diagnostic_device",
|
|
29
|
+
field=models.ForeignKey(
|
|
30
|
+
blank=True,
|
|
31
|
+
db_constraint=False,
|
|
32
|
+
limit_choices_to={"name__icontains": "FBG"},
|
|
33
|
+
null=True,
|
|
34
|
+
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
35
|
+
related_name="+",
|
|
36
|
+
to="meta_lists.diagnosticdevices",
|
|
37
|
+
),
|
|
38
|
+
),
|
|
39
|
+
]
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Generated by Django 5.2.10 on 2026-01-23 01:46
|
|
2
|
+
|
|
3
|
+
import django.db.models.deletion
|
|
4
|
+
from django.db import migrations, models
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
("meta_lists", "0021_diagnosticdevices"),
|
|
11
|
+
("meta_subject", "0239_glucosefbg_diagnostic_device_and_more"),
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
operations = [
|
|
15
|
+
migrations.AddField(
|
|
16
|
+
model_name="glucose",
|
|
17
|
+
name="diagnostic_device",
|
|
18
|
+
field=models.ForeignKey(
|
|
19
|
+
limit_choices_to={"name__in": ["accuchek", "hemocue", "OTHER"]},
|
|
20
|
+
null=True,
|
|
21
|
+
on_delete=django.db.models.deletion.PROTECT,
|
|
22
|
+
to="meta_lists.diagnosticdevices",
|
|
23
|
+
),
|
|
24
|
+
),
|
|
25
|
+
migrations.AddField(
|
|
26
|
+
model_name="historicalglucose",
|
|
27
|
+
name="diagnostic_device",
|
|
28
|
+
field=models.ForeignKey(
|
|
29
|
+
blank=True,
|
|
30
|
+
db_constraint=False,
|
|
31
|
+
limit_choices_to={"name__in": ["accuchek", "hemocue", "OTHER"]},
|
|
32
|
+
null=True,
|
|
33
|
+
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
34
|
+
related_name="+",
|
|
35
|
+
to="meta_lists.diagnosticdevices",
|
|
36
|
+
),
|
|
37
|
+
),
|
|
38
|
+
migrations.AlterField(
|
|
39
|
+
model_name="glucosefbg",
|
|
40
|
+
name="diagnostic_device",
|
|
41
|
+
field=models.ForeignKey(
|
|
42
|
+
limit_choices_to={"name__in": ["accuchek", "hemocue", "OTHER"]},
|
|
43
|
+
null=True,
|
|
44
|
+
on_delete=django.db.models.deletion.PROTECT,
|
|
45
|
+
to="meta_lists.diagnosticdevices",
|
|
46
|
+
),
|
|
47
|
+
),
|
|
48
|
+
migrations.AlterField(
|
|
49
|
+
model_name="historicalglucosefbg",
|
|
50
|
+
name="diagnostic_device",
|
|
51
|
+
field=models.ForeignKey(
|
|
52
|
+
blank=True,
|
|
53
|
+
db_constraint=False,
|
|
54
|
+
limit_choices_to={"name__in": ["accuchek", "hemocue", "OTHER"]},
|
|
55
|
+
null=True,
|
|
56
|
+
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
57
|
+
related_name="+",
|
|
58
|
+
to="meta_lists.diagnosticdevices",
|
|
59
|
+
),
|
|
60
|
+
),
|
|
61
|
+
]
|
|
File without changes
|
meta_subject/models/glucose.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from clinicedc_constants import NOT_APPLICABLE
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE, OTHER
|
|
2
2
|
from django.db import models
|
|
3
3
|
from edc_constants.choices import YES_NO
|
|
4
4
|
from edc_glucose.model_mixin_factories import (
|
|
@@ -9,6 +9,8 @@ from edc_glucose.model_mixin_factories import (
|
|
|
9
9
|
from edc_model.models import BaseUuidModel
|
|
10
10
|
from edc_utils import formatted_date
|
|
11
11
|
|
|
12
|
+
from meta_lists.models import DiagnosticDevices
|
|
13
|
+
|
|
12
14
|
from ..choices import ENDPOINT_CHOICES
|
|
13
15
|
from ..constants import AMENDMENT_DATE
|
|
14
16
|
from ..model_mixins import CrfModelMixin
|
|
@@ -46,6 +48,14 @@ class Glucose(
|
|
|
46
48
|
verbose_name="If NO, provide reason", max_length=150, default="", blank=True
|
|
47
49
|
)
|
|
48
50
|
|
|
51
|
+
diagnostic_device = models.ForeignKey(
|
|
52
|
+
DiagnosticDevices,
|
|
53
|
+
on_delete=models.PROTECT,
|
|
54
|
+
null=True,
|
|
55
|
+
blank=False,
|
|
56
|
+
limit_choices_to={"name__in": ["accuchek", "hemocue", OTHER]},
|
|
57
|
+
)
|
|
58
|
+
|
|
49
59
|
ogtt_performed = models.CharField(
|
|
50
60
|
verbose_name="Was the OGTT test performed?",
|
|
51
61
|
max_length=15,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from clinicedc_constants import NO, NOT_APPLICABLE
|
|
1
|
+
from clinicedc_constants import NO, NOT_APPLICABLE, OTHER
|
|
2
2
|
from django.db import models
|
|
3
3
|
from edc_constants.choices import YES_NO
|
|
4
4
|
from edc_glucose.model_mixin_factories import (
|
|
@@ -8,6 +8,8 @@ from edc_glucose.model_mixin_factories import (
|
|
|
8
8
|
from edc_model.models import BaseUuidModel
|
|
9
9
|
from edc_utils import formatted_date
|
|
10
10
|
|
|
11
|
+
from meta_lists.models import DiagnosticDevices
|
|
12
|
+
|
|
11
13
|
from ..choices import ENDPOINT_CHOICES
|
|
12
14
|
from ..constants import AMENDMENT_DATE
|
|
13
15
|
from ..model_mixins import CrfModelMixin
|
|
@@ -69,6 +71,14 @@ class GlucoseFbg(
|
|
|
69
71
|
help_text="Date should be within 1 week of report date",
|
|
70
72
|
)
|
|
71
73
|
|
|
74
|
+
diagnostic_device = models.ForeignKey(
|
|
75
|
+
DiagnosticDevices,
|
|
76
|
+
on_delete=models.PROTECT,
|
|
77
|
+
null=True,
|
|
78
|
+
blank=False,
|
|
79
|
+
limit_choices_to={"name__in": ["accuchek", "hemocue", OTHER]},
|
|
80
|
+
)
|
|
81
|
+
|
|
72
82
|
class Meta(CrfModelMixin.Meta, BaseUuidModel.Meta):
|
|
73
83
|
verbose_name = "Glucose (FBG)"
|
|
74
84
|
verbose_name_plural = "Glucose (FBG)"
|
|
File without changes
|
|
File without changes
|