meta-edc 1.1.17__py3-none-any.whl → 1.1.19__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.
Potentially problematic release.
This version of meta-edc might be problematic. Click here for more details.
- meta_consent/admin/__init__.py +1 -0
- meta_consent/admin/subject_consent_spfq_admin.py +58 -0
- meta_consent/forms/__init__.py +2 -0
- meta_consent/forms/subject_consent_spfq_form.py +55 -0
- meta_consent/migrations/0033_historicalsubjectconsentspfq_subjectconsentspfq.py +615 -0
- meta_consent/models/__init__.py +2 -0
- meta_consent/models/subject_consent_spfq.py +103 -0
- meta_edc/settings/defaults.py +1 -1
- {meta_edc-1.1.17.dist-info → meta_edc-1.1.19.dist-info}/METADATA +5 -5
- {meta_edc-1.1.17.dist-info → meta_edc-1.1.19.dist-info}/RECORD +31 -16
- meta_labs/list_data.py +2 -2
- meta_rando/migrations/0007_spfqlist.py +197 -0
- meta_rando/models/__init__.py +2 -0
- meta_rando/{models.py → models/randomization_list.py} +3 -3
- meta_rando/models/spfq_list.py +26 -0
- meta_subject/admin/__init__.py +2 -0
- meta_subject/admin/spfg_admin.py +103 -0
- meta_subject/choices.py +37 -0
- meta_subject/constants.py +14 -0
- meta_subject/forms/__init__.py +2 -0
- meta_subject/forms/spfq_form.py +65 -0
- meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +1 -6780
- meta_subject/migrations/0229_alter_glucosefbg_consent_model_and_more.py +1918 -0
- meta_subject/migrations/0230_alter_historicaldelivery_action_identifier_and_more.py +1733 -0
- meta_subject/migrations/0231_alter_historicalmedicationadherence_consent_model_and_more.py +2054 -0
- meta_subject/migrations/0232_alter_patienthistory_concomitant_conditions_and_more.py +1170 -0
- meta_subject/migrations/0233_historicalspfq_spfq.py +1066 -0
- meta_subject/models/__init__.py +2 -0
- meta_subject/models/spfq.py +190 -0
- {meta_edc-1.1.17.dist-info → meta_edc-1.1.19.dist-info}/WHEEL +0 -0
- {meta_edc-1.1.17.dist-info → meta_edc-1.1.19.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,1066 @@
|
|
|
1
|
+
# Generated by Django 5.2.6 on 2025-09-30 00:41
|
|
2
|
+
|
|
3
|
+
import _socket
|
|
4
|
+
import django.db.models.deletion
|
|
5
|
+
import django.utils.timezone
|
|
6
|
+
import django_audit_fields.fields.hostname_modification_field
|
|
7
|
+
import django_audit_fields.fields.userfield
|
|
8
|
+
import django_audit_fields.fields.uuid_auto_field
|
|
9
|
+
import django_revision.revision_field
|
|
10
|
+
import edc_crf.model_mixins.crf_status_model_mixin
|
|
11
|
+
import edc_model.validators.date
|
|
12
|
+
import edc_protocol.validators
|
|
13
|
+
import edc_visit_tracking.managers
|
|
14
|
+
import simple_history.models
|
|
15
|
+
import uuid
|
|
16
|
+
from django.conf import settings
|
|
17
|
+
from django.db import migrations, models
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Migration(migrations.Migration):
|
|
21
|
+
|
|
22
|
+
dependencies = [
|
|
23
|
+
("meta_subject", "0232_alter_patienthistory_concomitant_conditions_and_more"),
|
|
24
|
+
("sites", "0002_alter_domain_unique"),
|
|
25
|
+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
operations = [
|
|
29
|
+
migrations.CreateModel(
|
|
30
|
+
name="HistoricalSpfq",
|
|
31
|
+
fields=[
|
|
32
|
+
(
|
|
33
|
+
"revision",
|
|
34
|
+
django_revision.revision_field.RevisionField(
|
|
35
|
+
blank=True,
|
|
36
|
+
default="",
|
|
37
|
+
editable=False,
|
|
38
|
+
help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
|
|
39
|
+
max_length=75,
|
|
40
|
+
verbose_name="Revision",
|
|
41
|
+
),
|
|
42
|
+
),
|
|
43
|
+
(
|
|
44
|
+
"created",
|
|
45
|
+
models.DateTimeField(blank=True, default=django.utils.timezone.now),
|
|
46
|
+
),
|
|
47
|
+
(
|
|
48
|
+
"modified",
|
|
49
|
+
models.DateTimeField(blank=True, default=django.utils.timezone.now),
|
|
50
|
+
),
|
|
51
|
+
(
|
|
52
|
+
"user_created",
|
|
53
|
+
django_audit_fields.fields.userfield.UserField(
|
|
54
|
+
blank=True,
|
|
55
|
+
default="",
|
|
56
|
+
help_text="Updated by admin.save_model",
|
|
57
|
+
max_length=50,
|
|
58
|
+
verbose_name="user created",
|
|
59
|
+
),
|
|
60
|
+
),
|
|
61
|
+
(
|
|
62
|
+
"user_modified",
|
|
63
|
+
django_audit_fields.fields.userfield.UserField(
|
|
64
|
+
blank=True,
|
|
65
|
+
default="",
|
|
66
|
+
help_text="Updated by admin.save_model",
|
|
67
|
+
max_length=50,
|
|
68
|
+
verbose_name="user modified",
|
|
69
|
+
),
|
|
70
|
+
),
|
|
71
|
+
(
|
|
72
|
+
"hostname_created",
|
|
73
|
+
models.CharField(
|
|
74
|
+
blank=True,
|
|
75
|
+
default=_socket.gethostname,
|
|
76
|
+
help_text="System field. (modified on create only)",
|
|
77
|
+
max_length=60,
|
|
78
|
+
verbose_name="Hostname created",
|
|
79
|
+
),
|
|
80
|
+
),
|
|
81
|
+
(
|
|
82
|
+
"hostname_modified",
|
|
83
|
+
django_audit_fields.fields.hostname_modification_field.HostnameModificationField(
|
|
84
|
+
blank=True,
|
|
85
|
+
default="",
|
|
86
|
+
help_text="System field. (modified on every save)",
|
|
87
|
+
max_length=50,
|
|
88
|
+
verbose_name="Hostname modified",
|
|
89
|
+
),
|
|
90
|
+
),
|
|
91
|
+
(
|
|
92
|
+
"device_created",
|
|
93
|
+
models.CharField(
|
|
94
|
+
blank=True,
|
|
95
|
+
default="",
|
|
96
|
+
max_length=10,
|
|
97
|
+
verbose_name="Device created",
|
|
98
|
+
),
|
|
99
|
+
),
|
|
100
|
+
(
|
|
101
|
+
"device_modified",
|
|
102
|
+
models.CharField(
|
|
103
|
+
blank=True,
|
|
104
|
+
default="",
|
|
105
|
+
max_length=10,
|
|
106
|
+
verbose_name="Device modified",
|
|
107
|
+
),
|
|
108
|
+
),
|
|
109
|
+
(
|
|
110
|
+
"locale_created",
|
|
111
|
+
models.CharField(
|
|
112
|
+
blank=True,
|
|
113
|
+
default="",
|
|
114
|
+
help_text="Auto-updated by Modeladmin",
|
|
115
|
+
max_length=10,
|
|
116
|
+
verbose_name="Locale created",
|
|
117
|
+
),
|
|
118
|
+
),
|
|
119
|
+
(
|
|
120
|
+
"locale_modified",
|
|
121
|
+
models.CharField(
|
|
122
|
+
blank=True,
|
|
123
|
+
default="",
|
|
124
|
+
help_text="Auto-updated by Modeladmin",
|
|
125
|
+
max_length=10,
|
|
126
|
+
verbose_name="Locale modified",
|
|
127
|
+
),
|
|
128
|
+
),
|
|
129
|
+
(
|
|
130
|
+
"id",
|
|
131
|
+
django_audit_fields.fields.uuid_auto_field.UUIDAutoField(
|
|
132
|
+
blank=True,
|
|
133
|
+
db_index=True,
|
|
134
|
+
editable=False,
|
|
135
|
+
help_text="System auto field. UUID primary key.",
|
|
136
|
+
),
|
|
137
|
+
),
|
|
138
|
+
(
|
|
139
|
+
"consent_model",
|
|
140
|
+
models.CharField(blank=True, default="", max_length=50),
|
|
141
|
+
),
|
|
142
|
+
(
|
|
143
|
+
"consent_version",
|
|
144
|
+
models.CharField(blank=True, default="", max_length=10),
|
|
145
|
+
),
|
|
146
|
+
(
|
|
147
|
+
"report_datetime",
|
|
148
|
+
models.DateTimeField(
|
|
149
|
+
default=django.utils.timezone.now,
|
|
150
|
+
help_text="If reporting today, use today's date/time, otherwise use the date/time this information was reported.",
|
|
151
|
+
validators=[
|
|
152
|
+
edc_protocol.validators.datetime_not_before_study_start,
|
|
153
|
+
edc_model.validators.date.datetime_not_future,
|
|
154
|
+
],
|
|
155
|
+
verbose_name="Report Date",
|
|
156
|
+
),
|
|
157
|
+
),
|
|
158
|
+
(
|
|
159
|
+
"crf_status",
|
|
160
|
+
models.CharField(
|
|
161
|
+
choices=[
|
|
162
|
+
("INCOMPLETE", "Incomplete (some data pending)"),
|
|
163
|
+
("COMPLETE", "Complete"),
|
|
164
|
+
],
|
|
165
|
+
default=edc_crf.model_mixins.crf_status_model_mixin.get_crf_status_default,
|
|
166
|
+
help_text="If some data is still pending, flag this CRF as incomplete",
|
|
167
|
+
max_length=25,
|
|
168
|
+
verbose_name="CRF status",
|
|
169
|
+
),
|
|
170
|
+
),
|
|
171
|
+
(
|
|
172
|
+
"crf_status_comments",
|
|
173
|
+
models.TextField(
|
|
174
|
+
blank=True,
|
|
175
|
+
default="",
|
|
176
|
+
help_text="for example, why some data is still pending",
|
|
177
|
+
verbose_name="Any comments related to status of this CRF",
|
|
178
|
+
),
|
|
179
|
+
),
|
|
180
|
+
(
|
|
181
|
+
"a01",
|
|
182
|
+
models.CharField(
|
|
183
|
+
choices=[
|
|
184
|
+
("strongly_disagree", "Strongly disagree"),
|
|
185
|
+
("disagree", "disagree"),
|
|
186
|
+
("neutral", "Neutral"),
|
|
187
|
+
("agree", "Agree"),
|
|
188
|
+
("strongly_agree", "Strongly agree"),
|
|
189
|
+
],
|
|
190
|
+
help_text="for example: when and how to take or use a treatment",
|
|
191
|
+
max_length=25,
|
|
192
|
+
verbose_name="I understood the treatment process in this trial",
|
|
193
|
+
),
|
|
194
|
+
),
|
|
195
|
+
(
|
|
196
|
+
"a02",
|
|
197
|
+
models.CharField(
|
|
198
|
+
choices=[
|
|
199
|
+
("strongly_disagree", "Strongly disagree"),
|
|
200
|
+
("disagree", "disagree"),
|
|
201
|
+
("neutral", "Neutral"),
|
|
202
|
+
("agree", "Agree"),
|
|
203
|
+
("strongly_agree", "Strongly agree"),
|
|
204
|
+
],
|
|
205
|
+
help_text="for example: visits and procedures, time commitment, who to contact with questions",
|
|
206
|
+
max_length=25,
|
|
207
|
+
verbose_name="The information given to me before I joined the trial was everything I wanted to know",
|
|
208
|
+
),
|
|
209
|
+
),
|
|
210
|
+
(
|
|
211
|
+
"a03",
|
|
212
|
+
models.CharField(
|
|
213
|
+
choices=[
|
|
214
|
+
("strongly_disagree", "Strongly disagree"),
|
|
215
|
+
("disagree", "disagree"),
|
|
216
|
+
("neutral", "Neutral"),
|
|
217
|
+
("agree", "Agree"),
|
|
218
|
+
("strongly_agree", "Strongly agree"),
|
|
219
|
+
],
|
|
220
|
+
help_text="for example: visits and procedures, time commitment, who to contact with questions",
|
|
221
|
+
max_length=25,
|
|
222
|
+
verbose_name="The information given to me before I joined the trial was easy for me to understand",
|
|
223
|
+
),
|
|
224
|
+
),
|
|
225
|
+
(
|
|
226
|
+
"a04",
|
|
227
|
+
models.CharField(
|
|
228
|
+
choices=[
|
|
229
|
+
("strongly_disagree", "Strongly disagree"),
|
|
230
|
+
("disagree", "disagree"),
|
|
231
|
+
("neutral", "Neutral"),
|
|
232
|
+
("agree", "Agree"),
|
|
233
|
+
("strongly_agree", "Strongly agree"),
|
|
234
|
+
],
|
|
235
|
+
max_length=25,
|
|
236
|
+
verbose_name="I felt comfortable that I could ask any questions before I joined the trial",
|
|
237
|
+
),
|
|
238
|
+
),
|
|
239
|
+
(
|
|
240
|
+
"b01",
|
|
241
|
+
models.CharField(
|
|
242
|
+
choices=[
|
|
243
|
+
("strongly_disagree", "Strongly disagree"),
|
|
244
|
+
("disagree", "disagree"),
|
|
245
|
+
("neutral", "Neutral"),
|
|
246
|
+
("agree", "Agree"),
|
|
247
|
+
("strongly_agree", "Strongly agree"),
|
|
248
|
+
],
|
|
249
|
+
help_text="for example: comfort and privacy of treatment area, waiting area, parking, ease of access to the site",
|
|
250
|
+
max_length=25,
|
|
251
|
+
verbose_name="Overall I was satisfied with the trial site",
|
|
252
|
+
),
|
|
253
|
+
),
|
|
254
|
+
(
|
|
255
|
+
"b02",
|
|
256
|
+
models.CharField(
|
|
257
|
+
choices=[
|
|
258
|
+
("strongly_disagree", "Strongly disagree"),
|
|
259
|
+
("disagree", "disagree"),
|
|
260
|
+
("neutral", "Neutral"),
|
|
261
|
+
("agree", "Agree"),
|
|
262
|
+
("strongly_agree", "Strongly agree"),
|
|
263
|
+
],
|
|
264
|
+
max_length=25,
|
|
265
|
+
verbose_name="My trial visits were well organized",
|
|
266
|
+
),
|
|
267
|
+
),
|
|
268
|
+
(
|
|
269
|
+
"b03",
|
|
270
|
+
models.CharField(
|
|
271
|
+
choices=[
|
|
272
|
+
("strongly_disagree", "Strongly disagree"),
|
|
273
|
+
("disagree", "disagree"),
|
|
274
|
+
("neutral", "Neutral"),
|
|
275
|
+
("agree", "Agree"),
|
|
276
|
+
("strongly_agree", "Strongly agree"),
|
|
277
|
+
],
|
|
278
|
+
max_length=25,
|
|
279
|
+
verbose_name="My trial visits were scheduled at a convenient time for me",
|
|
280
|
+
),
|
|
281
|
+
),
|
|
282
|
+
(
|
|
283
|
+
"b04",
|
|
284
|
+
models.CharField(
|
|
285
|
+
choices=[
|
|
286
|
+
("strongly_disagree", "Strongly disagree"),
|
|
287
|
+
("disagree", "disagree"),
|
|
288
|
+
("neutral", "Neutral"),
|
|
289
|
+
("agree", "Agree"),
|
|
290
|
+
("strongly_agree", "Strongly agree"),
|
|
291
|
+
],
|
|
292
|
+
max_length=25,
|
|
293
|
+
verbose_name="The staff treated me with respect",
|
|
294
|
+
),
|
|
295
|
+
),
|
|
296
|
+
(
|
|
297
|
+
"b05",
|
|
298
|
+
models.CharField(
|
|
299
|
+
choices=[
|
|
300
|
+
("strongly_disagree", "Strongly disagree"),
|
|
301
|
+
("disagree", "disagree"),
|
|
302
|
+
("neutral", "Neutral"),
|
|
303
|
+
("agree", "Agree"),
|
|
304
|
+
("strongly_agree", "Strongly agree"),
|
|
305
|
+
],
|
|
306
|
+
max_length=25,
|
|
307
|
+
verbose_name="I felt comfortable that I could ask questions during the trial",
|
|
308
|
+
),
|
|
309
|
+
),
|
|
310
|
+
(
|
|
311
|
+
"b06",
|
|
312
|
+
models.CharField(
|
|
313
|
+
choices=[
|
|
314
|
+
("strongly_disagree", "Strongly disagree"),
|
|
315
|
+
("disagree", "disagree"),
|
|
316
|
+
("neutral", "Neutral"),
|
|
317
|
+
("agree", "Agree"),
|
|
318
|
+
("strongly_agree", "Strongly agree"),
|
|
319
|
+
],
|
|
320
|
+
max_length=25,
|
|
321
|
+
verbose_name="I was satisfied with the answers I have received to my questions during the trial",
|
|
322
|
+
),
|
|
323
|
+
),
|
|
324
|
+
(
|
|
325
|
+
"b07",
|
|
326
|
+
models.CharField(
|
|
327
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
328
|
+
help_text="for example: in person visits, questionnaires, forms",
|
|
329
|
+
max_length=25,
|
|
330
|
+
verbose_name="The time taken to collect data was acceptable to me",
|
|
331
|
+
),
|
|
332
|
+
),
|
|
333
|
+
(
|
|
334
|
+
"b08",
|
|
335
|
+
models.CharField(
|
|
336
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
337
|
+
help_text="for example: household chores, work commitments, eating",
|
|
338
|
+
max_length=25,
|
|
339
|
+
verbose_name="The impact the trial has had on my daily activities is acceptable",
|
|
340
|
+
),
|
|
341
|
+
),
|
|
342
|
+
(
|
|
343
|
+
"b09",
|
|
344
|
+
models.CharField(
|
|
345
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
346
|
+
help_text="for example: in person, online questionnaire, diary, wearable sensors, monitoring machines, technology",
|
|
347
|
+
max_length=25,
|
|
348
|
+
verbose_name="The way in which trial data is being collected is acceptable to me",
|
|
349
|
+
),
|
|
350
|
+
),
|
|
351
|
+
(
|
|
352
|
+
"b10",
|
|
353
|
+
models.CharField(
|
|
354
|
+
choices=[
|
|
355
|
+
("strongly_disagree", "Strongly disagree"),
|
|
356
|
+
("disagree", "disagree"),
|
|
357
|
+
("neutral", "Neutral"),
|
|
358
|
+
("agree", "Agree"),
|
|
359
|
+
("strongly_agree", "Strongly agree"),
|
|
360
|
+
],
|
|
361
|
+
help_text="for example: blood tests, scans etc.",
|
|
362
|
+
max_length=25,
|
|
363
|
+
verbose_name="Optional: I am being kept informed of the results of my medical tests done during the trial, including during screening",
|
|
364
|
+
),
|
|
365
|
+
),
|
|
366
|
+
(
|
|
367
|
+
"c01",
|
|
368
|
+
models.CharField(
|
|
369
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
370
|
+
max_length=25,
|
|
371
|
+
verbose_name="I was informed when I had completed the trial",
|
|
372
|
+
),
|
|
373
|
+
),
|
|
374
|
+
(
|
|
375
|
+
"c02",
|
|
376
|
+
models.CharField(
|
|
377
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
378
|
+
max_length=25,
|
|
379
|
+
verbose_name="I was informed of any future opportunities to access the overall trial results if I wanted to",
|
|
380
|
+
),
|
|
381
|
+
),
|
|
382
|
+
(
|
|
383
|
+
"c03",
|
|
384
|
+
models.CharField(
|
|
385
|
+
choices=[
|
|
386
|
+
("very_difficult", "Very difficult"),
|
|
387
|
+
("difficult", "Difficult"),
|
|
388
|
+
("neutral", "Neutral"),
|
|
389
|
+
("easy", "Easy"),
|
|
390
|
+
("very_easy", "Very easy"),
|
|
391
|
+
],
|
|
392
|
+
max_length=25,
|
|
393
|
+
verbose_name="How easy was it to take the medication?",
|
|
394
|
+
),
|
|
395
|
+
),
|
|
396
|
+
(
|
|
397
|
+
"c04",
|
|
398
|
+
models.CharField(
|
|
399
|
+
choices=[
|
|
400
|
+
("not_at_all", "Not at all"),
|
|
401
|
+
("slight", "Slight"),
|
|
402
|
+
("moderate", "Moderate"),
|
|
403
|
+
("extreme", "Extreme"),
|
|
404
|
+
("severe", "Severe"),
|
|
405
|
+
],
|
|
406
|
+
max_length=25,
|
|
407
|
+
verbose_name="Did you experience any burden or side effects?",
|
|
408
|
+
),
|
|
409
|
+
),
|
|
410
|
+
(
|
|
411
|
+
"c05",
|
|
412
|
+
models.CharField(
|
|
413
|
+
choices=[
|
|
414
|
+
("not_at_all", "Not at all"),
|
|
415
|
+
("slightly", "Slightly"),
|
|
416
|
+
("moderately", "Moderately"),
|
|
417
|
+
("highly", "Highly"),
|
|
418
|
+
("very_highly", "Very highly"),
|
|
419
|
+
],
|
|
420
|
+
max_length=25,
|
|
421
|
+
verbose_name="How acceptable was it to take the drug?",
|
|
422
|
+
),
|
|
423
|
+
),
|
|
424
|
+
(
|
|
425
|
+
"c06",
|
|
426
|
+
models.CharField(
|
|
427
|
+
choices=[
|
|
428
|
+
("very_difficult", "Very difficult"),
|
|
429
|
+
("difficult", "Difficult"),
|
|
430
|
+
("neutral", "Neutral"),
|
|
431
|
+
("easy", "Easy"),
|
|
432
|
+
("very_easy", "Very easy"),
|
|
433
|
+
],
|
|
434
|
+
max_length=25,
|
|
435
|
+
verbose_name="How easy was it to fit the medication into your routine?",
|
|
436
|
+
),
|
|
437
|
+
),
|
|
438
|
+
(
|
|
439
|
+
"c07",
|
|
440
|
+
models.CharField(
|
|
441
|
+
choices=[
|
|
442
|
+
("not_at_all", "Not at all"),
|
|
443
|
+
("slight", "Slight"),
|
|
444
|
+
("moderate", "Moderate"),
|
|
445
|
+
("extreme", "Extreme"),
|
|
446
|
+
("severe", "Severe"),
|
|
447
|
+
],
|
|
448
|
+
max_length=25,
|
|
449
|
+
verbose_name="How burdensome was taking part in the trial?",
|
|
450
|
+
),
|
|
451
|
+
),
|
|
452
|
+
(
|
|
453
|
+
"c08",
|
|
454
|
+
models.CharField(
|
|
455
|
+
choices=[
|
|
456
|
+
("strongly_disagree", "Strongly disagree"),
|
|
457
|
+
("disagree", "disagree"),
|
|
458
|
+
("neutral", "Neutral"),
|
|
459
|
+
("agree", "Agree"),
|
|
460
|
+
("strongly_agree", "Strongly agree"),
|
|
461
|
+
],
|
|
462
|
+
help_text="for example: future treatment, follow-up contact details",
|
|
463
|
+
max_length=25,
|
|
464
|
+
verbose_name="Overall, I was satisfied with the information I received about future support after the trial",
|
|
465
|
+
),
|
|
466
|
+
),
|
|
467
|
+
(
|
|
468
|
+
"c09",
|
|
469
|
+
models.CharField(
|
|
470
|
+
choices=[
|
|
471
|
+
("strongly_disagree", "Strongly disagree"),
|
|
472
|
+
("disagree", "disagree"),
|
|
473
|
+
("neutral", "Neutral"),
|
|
474
|
+
("agree", "Agree"),
|
|
475
|
+
("strongly_agree", "Strongly agree"),
|
|
476
|
+
],
|
|
477
|
+
max_length=25,
|
|
478
|
+
verbose_name="Overall, I was satisfied with my trial experience",
|
|
479
|
+
),
|
|
480
|
+
),
|
|
481
|
+
(
|
|
482
|
+
"c10",
|
|
483
|
+
models.CharField(
|
|
484
|
+
choices=[
|
|
485
|
+
("much_less_expected", "Much less than expected"),
|
|
486
|
+
("somewhat_less_expected", "Somewhat less than expected"),
|
|
487
|
+
("same_as_expected", "Same as expected"),
|
|
488
|
+
("somewhat_more_expected", "Somewhat more than expected"),
|
|
489
|
+
("much_more_expected", "Much more than expected"),
|
|
490
|
+
],
|
|
491
|
+
max_length=25,
|
|
492
|
+
verbose_name="Compared to when the trial started, the overall commitment required was similar to what I expected",
|
|
493
|
+
),
|
|
494
|
+
),
|
|
495
|
+
(
|
|
496
|
+
"history_id",
|
|
497
|
+
models.UUIDField(
|
|
498
|
+
default=uuid.uuid4,
|
|
499
|
+
editable=False,
|
|
500
|
+
primary_key=True,
|
|
501
|
+
serialize=False,
|
|
502
|
+
),
|
|
503
|
+
),
|
|
504
|
+
("history_date", models.DateTimeField(db_index=True)),
|
|
505
|
+
("history_change_reason", models.CharField(max_length=100, null=True)),
|
|
506
|
+
(
|
|
507
|
+
"history_type",
|
|
508
|
+
models.CharField(
|
|
509
|
+
choices=[("+", "Created"), ("~", "Changed"), ("-", "Deleted")],
|
|
510
|
+
max_length=1,
|
|
511
|
+
),
|
|
512
|
+
),
|
|
513
|
+
(
|
|
514
|
+
"history_user",
|
|
515
|
+
models.ForeignKey(
|
|
516
|
+
null=True,
|
|
517
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
|
518
|
+
related_name="+",
|
|
519
|
+
to=settings.AUTH_USER_MODEL,
|
|
520
|
+
),
|
|
521
|
+
),
|
|
522
|
+
(
|
|
523
|
+
"site",
|
|
524
|
+
models.ForeignKey(
|
|
525
|
+
blank=True,
|
|
526
|
+
db_constraint=False,
|
|
527
|
+
null=True,
|
|
528
|
+
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
529
|
+
related_name="+",
|
|
530
|
+
to="sites.site",
|
|
531
|
+
),
|
|
532
|
+
),
|
|
533
|
+
(
|
|
534
|
+
"subject_visit",
|
|
535
|
+
models.ForeignKey(
|
|
536
|
+
blank=True,
|
|
537
|
+
db_constraint=False,
|
|
538
|
+
null=True,
|
|
539
|
+
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
540
|
+
related_name="+",
|
|
541
|
+
to="meta_subject.subjectvisit",
|
|
542
|
+
),
|
|
543
|
+
),
|
|
544
|
+
],
|
|
545
|
+
options={
|
|
546
|
+
"verbose_name": "historical Feedback Questionnaire (SPFQ)",
|
|
547
|
+
"verbose_name_plural": "historical Feedback Questionnaires (SPFQ)",
|
|
548
|
+
"ordering": ("-history_date", "-history_id"),
|
|
549
|
+
"get_latest_by": ("history_date", "history_id"),
|
|
550
|
+
},
|
|
551
|
+
bases=(simple_history.models.HistoricalChanges, models.Model),
|
|
552
|
+
),
|
|
553
|
+
migrations.CreateModel(
|
|
554
|
+
name="Spfq",
|
|
555
|
+
fields=[
|
|
556
|
+
(
|
|
557
|
+
"revision",
|
|
558
|
+
django_revision.revision_field.RevisionField(
|
|
559
|
+
blank=True,
|
|
560
|
+
default="",
|
|
561
|
+
editable=False,
|
|
562
|
+
help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
|
|
563
|
+
max_length=75,
|
|
564
|
+
verbose_name="Revision",
|
|
565
|
+
),
|
|
566
|
+
),
|
|
567
|
+
(
|
|
568
|
+
"created",
|
|
569
|
+
models.DateTimeField(blank=True, default=django.utils.timezone.now),
|
|
570
|
+
),
|
|
571
|
+
(
|
|
572
|
+
"modified",
|
|
573
|
+
models.DateTimeField(blank=True, default=django.utils.timezone.now),
|
|
574
|
+
),
|
|
575
|
+
(
|
|
576
|
+
"user_created",
|
|
577
|
+
django_audit_fields.fields.userfield.UserField(
|
|
578
|
+
blank=True,
|
|
579
|
+
default="",
|
|
580
|
+
help_text="Updated by admin.save_model",
|
|
581
|
+
max_length=50,
|
|
582
|
+
verbose_name="user created",
|
|
583
|
+
),
|
|
584
|
+
),
|
|
585
|
+
(
|
|
586
|
+
"user_modified",
|
|
587
|
+
django_audit_fields.fields.userfield.UserField(
|
|
588
|
+
blank=True,
|
|
589
|
+
default="",
|
|
590
|
+
help_text="Updated by admin.save_model",
|
|
591
|
+
max_length=50,
|
|
592
|
+
verbose_name="user modified",
|
|
593
|
+
),
|
|
594
|
+
),
|
|
595
|
+
(
|
|
596
|
+
"hostname_created",
|
|
597
|
+
models.CharField(
|
|
598
|
+
blank=True,
|
|
599
|
+
default=_socket.gethostname,
|
|
600
|
+
help_text="System field. (modified on create only)",
|
|
601
|
+
max_length=60,
|
|
602
|
+
verbose_name="Hostname created",
|
|
603
|
+
),
|
|
604
|
+
),
|
|
605
|
+
(
|
|
606
|
+
"hostname_modified",
|
|
607
|
+
django_audit_fields.fields.hostname_modification_field.HostnameModificationField(
|
|
608
|
+
blank=True,
|
|
609
|
+
default="",
|
|
610
|
+
help_text="System field. (modified on every save)",
|
|
611
|
+
max_length=50,
|
|
612
|
+
verbose_name="Hostname modified",
|
|
613
|
+
),
|
|
614
|
+
),
|
|
615
|
+
(
|
|
616
|
+
"device_created",
|
|
617
|
+
models.CharField(
|
|
618
|
+
blank=True,
|
|
619
|
+
default="",
|
|
620
|
+
max_length=10,
|
|
621
|
+
verbose_name="Device created",
|
|
622
|
+
),
|
|
623
|
+
),
|
|
624
|
+
(
|
|
625
|
+
"device_modified",
|
|
626
|
+
models.CharField(
|
|
627
|
+
blank=True,
|
|
628
|
+
default="",
|
|
629
|
+
max_length=10,
|
|
630
|
+
verbose_name="Device modified",
|
|
631
|
+
),
|
|
632
|
+
),
|
|
633
|
+
(
|
|
634
|
+
"locale_created",
|
|
635
|
+
models.CharField(
|
|
636
|
+
blank=True,
|
|
637
|
+
default="",
|
|
638
|
+
help_text="Auto-updated by Modeladmin",
|
|
639
|
+
max_length=10,
|
|
640
|
+
verbose_name="Locale created",
|
|
641
|
+
),
|
|
642
|
+
),
|
|
643
|
+
(
|
|
644
|
+
"locale_modified",
|
|
645
|
+
models.CharField(
|
|
646
|
+
blank=True,
|
|
647
|
+
default="",
|
|
648
|
+
help_text="Auto-updated by Modeladmin",
|
|
649
|
+
max_length=10,
|
|
650
|
+
verbose_name="Locale modified",
|
|
651
|
+
),
|
|
652
|
+
),
|
|
653
|
+
(
|
|
654
|
+
"id",
|
|
655
|
+
django_audit_fields.fields.uuid_auto_field.UUIDAutoField(
|
|
656
|
+
blank=True,
|
|
657
|
+
editable=False,
|
|
658
|
+
help_text="System auto field. UUID primary key.",
|
|
659
|
+
primary_key=True,
|
|
660
|
+
serialize=False,
|
|
661
|
+
),
|
|
662
|
+
),
|
|
663
|
+
(
|
|
664
|
+
"consent_model",
|
|
665
|
+
models.CharField(blank=True, default="", max_length=50),
|
|
666
|
+
),
|
|
667
|
+
(
|
|
668
|
+
"consent_version",
|
|
669
|
+
models.CharField(blank=True, default="", max_length=10),
|
|
670
|
+
),
|
|
671
|
+
(
|
|
672
|
+
"report_datetime",
|
|
673
|
+
models.DateTimeField(
|
|
674
|
+
default=django.utils.timezone.now,
|
|
675
|
+
help_text="If reporting today, use today's date/time, otherwise use the date/time this information was reported.",
|
|
676
|
+
validators=[
|
|
677
|
+
edc_protocol.validators.datetime_not_before_study_start,
|
|
678
|
+
edc_model.validators.date.datetime_not_future,
|
|
679
|
+
],
|
|
680
|
+
verbose_name="Report Date",
|
|
681
|
+
),
|
|
682
|
+
),
|
|
683
|
+
(
|
|
684
|
+
"crf_status",
|
|
685
|
+
models.CharField(
|
|
686
|
+
choices=[
|
|
687
|
+
("INCOMPLETE", "Incomplete (some data pending)"),
|
|
688
|
+
("COMPLETE", "Complete"),
|
|
689
|
+
],
|
|
690
|
+
default=edc_crf.model_mixins.crf_status_model_mixin.get_crf_status_default,
|
|
691
|
+
help_text="If some data is still pending, flag this CRF as incomplete",
|
|
692
|
+
max_length=25,
|
|
693
|
+
verbose_name="CRF status",
|
|
694
|
+
),
|
|
695
|
+
),
|
|
696
|
+
(
|
|
697
|
+
"crf_status_comments",
|
|
698
|
+
models.TextField(
|
|
699
|
+
blank=True,
|
|
700
|
+
default="",
|
|
701
|
+
help_text="for example, why some data is still pending",
|
|
702
|
+
verbose_name="Any comments related to status of this CRF",
|
|
703
|
+
),
|
|
704
|
+
),
|
|
705
|
+
(
|
|
706
|
+
"a01",
|
|
707
|
+
models.CharField(
|
|
708
|
+
choices=[
|
|
709
|
+
("strongly_disagree", "Strongly disagree"),
|
|
710
|
+
("disagree", "disagree"),
|
|
711
|
+
("neutral", "Neutral"),
|
|
712
|
+
("agree", "Agree"),
|
|
713
|
+
("strongly_agree", "Strongly agree"),
|
|
714
|
+
],
|
|
715
|
+
help_text="for example: when and how to take or use a treatment",
|
|
716
|
+
max_length=25,
|
|
717
|
+
verbose_name="I understood the treatment process in this trial",
|
|
718
|
+
),
|
|
719
|
+
),
|
|
720
|
+
(
|
|
721
|
+
"a02",
|
|
722
|
+
models.CharField(
|
|
723
|
+
choices=[
|
|
724
|
+
("strongly_disagree", "Strongly disagree"),
|
|
725
|
+
("disagree", "disagree"),
|
|
726
|
+
("neutral", "Neutral"),
|
|
727
|
+
("agree", "Agree"),
|
|
728
|
+
("strongly_agree", "Strongly agree"),
|
|
729
|
+
],
|
|
730
|
+
help_text="for example: visits and procedures, time commitment, who to contact with questions",
|
|
731
|
+
max_length=25,
|
|
732
|
+
verbose_name="The information given to me before I joined the trial was everything I wanted to know",
|
|
733
|
+
),
|
|
734
|
+
),
|
|
735
|
+
(
|
|
736
|
+
"a03",
|
|
737
|
+
models.CharField(
|
|
738
|
+
choices=[
|
|
739
|
+
("strongly_disagree", "Strongly disagree"),
|
|
740
|
+
("disagree", "disagree"),
|
|
741
|
+
("neutral", "Neutral"),
|
|
742
|
+
("agree", "Agree"),
|
|
743
|
+
("strongly_agree", "Strongly agree"),
|
|
744
|
+
],
|
|
745
|
+
help_text="for example: visits and procedures, time commitment, who to contact with questions",
|
|
746
|
+
max_length=25,
|
|
747
|
+
verbose_name="The information given to me before I joined the trial was easy for me to understand",
|
|
748
|
+
),
|
|
749
|
+
),
|
|
750
|
+
(
|
|
751
|
+
"a04",
|
|
752
|
+
models.CharField(
|
|
753
|
+
choices=[
|
|
754
|
+
("strongly_disagree", "Strongly disagree"),
|
|
755
|
+
("disagree", "disagree"),
|
|
756
|
+
("neutral", "Neutral"),
|
|
757
|
+
("agree", "Agree"),
|
|
758
|
+
("strongly_agree", "Strongly agree"),
|
|
759
|
+
],
|
|
760
|
+
max_length=25,
|
|
761
|
+
verbose_name="I felt comfortable that I could ask any questions before I joined the trial",
|
|
762
|
+
),
|
|
763
|
+
),
|
|
764
|
+
(
|
|
765
|
+
"b01",
|
|
766
|
+
models.CharField(
|
|
767
|
+
choices=[
|
|
768
|
+
("strongly_disagree", "Strongly disagree"),
|
|
769
|
+
("disagree", "disagree"),
|
|
770
|
+
("neutral", "Neutral"),
|
|
771
|
+
("agree", "Agree"),
|
|
772
|
+
("strongly_agree", "Strongly agree"),
|
|
773
|
+
],
|
|
774
|
+
help_text="for example: comfort and privacy of treatment area, waiting area, parking, ease of access to the site",
|
|
775
|
+
max_length=25,
|
|
776
|
+
verbose_name="Overall I was satisfied with the trial site",
|
|
777
|
+
),
|
|
778
|
+
),
|
|
779
|
+
(
|
|
780
|
+
"b02",
|
|
781
|
+
models.CharField(
|
|
782
|
+
choices=[
|
|
783
|
+
("strongly_disagree", "Strongly disagree"),
|
|
784
|
+
("disagree", "disagree"),
|
|
785
|
+
("neutral", "Neutral"),
|
|
786
|
+
("agree", "Agree"),
|
|
787
|
+
("strongly_agree", "Strongly agree"),
|
|
788
|
+
],
|
|
789
|
+
max_length=25,
|
|
790
|
+
verbose_name="My trial visits were well organized",
|
|
791
|
+
),
|
|
792
|
+
),
|
|
793
|
+
(
|
|
794
|
+
"b03",
|
|
795
|
+
models.CharField(
|
|
796
|
+
choices=[
|
|
797
|
+
("strongly_disagree", "Strongly disagree"),
|
|
798
|
+
("disagree", "disagree"),
|
|
799
|
+
("neutral", "Neutral"),
|
|
800
|
+
("agree", "Agree"),
|
|
801
|
+
("strongly_agree", "Strongly agree"),
|
|
802
|
+
],
|
|
803
|
+
max_length=25,
|
|
804
|
+
verbose_name="My trial visits were scheduled at a convenient time for me",
|
|
805
|
+
),
|
|
806
|
+
),
|
|
807
|
+
(
|
|
808
|
+
"b04",
|
|
809
|
+
models.CharField(
|
|
810
|
+
choices=[
|
|
811
|
+
("strongly_disagree", "Strongly disagree"),
|
|
812
|
+
("disagree", "disagree"),
|
|
813
|
+
("neutral", "Neutral"),
|
|
814
|
+
("agree", "Agree"),
|
|
815
|
+
("strongly_agree", "Strongly agree"),
|
|
816
|
+
],
|
|
817
|
+
max_length=25,
|
|
818
|
+
verbose_name="The staff treated me with respect",
|
|
819
|
+
),
|
|
820
|
+
),
|
|
821
|
+
(
|
|
822
|
+
"b05",
|
|
823
|
+
models.CharField(
|
|
824
|
+
choices=[
|
|
825
|
+
("strongly_disagree", "Strongly disagree"),
|
|
826
|
+
("disagree", "disagree"),
|
|
827
|
+
("neutral", "Neutral"),
|
|
828
|
+
("agree", "Agree"),
|
|
829
|
+
("strongly_agree", "Strongly agree"),
|
|
830
|
+
],
|
|
831
|
+
max_length=25,
|
|
832
|
+
verbose_name="I felt comfortable that I could ask questions during the trial",
|
|
833
|
+
),
|
|
834
|
+
),
|
|
835
|
+
(
|
|
836
|
+
"b06",
|
|
837
|
+
models.CharField(
|
|
838
|
+
choices=[
|
|
839
|
+
("strongly_disagree", "Strongly disagree"),
|
|
840
|
+
("disagree", "disagree"),
|
|
841
|
+
("neutral", "Neutral"),
|
|
842
|
+
("agree", "Agree"),
|
|
843
|
+
("strongly_agree", "Strongly agree"),
|
|
844
|
+
],
|
|
845
|
+
max_length=25,
|
|
846
|
+
verbose_name="I was satisfied with the answers I have received to my questions during the trial",
|
|
847
|
+
),
|
|
848
|
+
),
|
|
849
|
+
(
|
|
850
|
+
"b07",
|
|
851
|
+
models.CharField(
|
|
852
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
853
|
+
help_text="for example: in person visits, questionnaires, forms",
|
|
854
|
+
max_length=25,
|
|
855
|
+
verbose_name="The time taken to collect data was acceptable to me",
|
|
856
|
+
),
|
|
857
|
+
),
|
|
858
|
+
(
|
|
859
|
+
"b08",
|
|
860
|
+
models.CharField(
|
|
861
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
862
|
+
help_text="for example: household chores, work commitments, eating",
|
|
863
|
+
max_length=25,
|
|
864
|
+
verbose_name="The impact the trial has had on my daily activities is acceptable",
|
|
865
|
+
),
|
|
866
|
+
),
|
|
867
|
+
(
|
|
868
|
+
"b09",
|
|
869
|
+
models.CharField(
|
|
870
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
871
|
+
help_text="for example: in person, online questionnaire, diary, wearable sensors, monitoring machines, technology",
|
|
872
|
+
max_length=25,
|
|
873
|
+
verbose_name="The way in which trial data is being collected is acceptable to me",
|
|
874
|
+
),
|
|
875
|
+
),
|
|
876
|
+
(
|
|
877
|
+
"b10",
|
|
878
|
+
models.CharField(
|
|
879
|
+
choices=[
|
|
880
|
+
("strongly_disagree", "Strongly disagree"),
|
|
881
|
+
("disagree", "disagree"),
|
|
882
|
+
("neutral", "Neutral"),
|
|
883
|
+
("agree", "Agree"),
|
|
884
|
+
("strongly_agree", "Strongly agree"),
|
|
885
|
+
],
|
|
886
|
+
help_text="for example: blood tests, scans etc.",
|
|
887
|
+
max_length=25,
|
|
888
|
+
verbose_name="Optional: I am being kept informed of the results of my medical tests done during the trial, including during screening",
|
|
889
|
+
),
|
|
890
|
+
),
|
|
891
|
+
(
|
|
892
|
+
"c01",
|
|
893
|
+
models.CharField(
|
|
894
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
895
|
+
max_length=25,
|
|
896
|
+
verbose_name="I was informed when I had completed the trial",
|
|
897
|
+
),
|
|
898
|
+
),
|
|
899
|
+
(
|
|
900
|
+
"c02",
|
|
901
|
+
models.CharField(
|
|
902
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
903
|
+
max_length=25,
|
|
904
|
+
verbose_name="I was informed of any future opportunities to access the overall trial results if I wanted to",
|
|
905
|
+
),
|
|
906
|
+
),
|
|
907
|
+
(
|
|
908
|
+
"c03",
|
|
909
|
+
models.CharField(
|
|
910
|
+
choices=[
|
|
911
|
+
("very_difficult", "Very difficult"),
|
|
912
|
+
("difficult", "Difficult"),
|
|
913
|
+
("neutral", "Neutral"),
|
|
914
|
+
("easy", "Easy"),
|
|
915
|
+
("very_easy", "Very easy"),
|
|
916
|
+
],
|
|
917
|
+
max_length=25,
|
|
918
|
+
verbose_name="How easy was it to take the medication?",
|
|
919
|
+
),
|
|
920
|
+
),
|
|
921
|
+
(
|
|
922
|
+
"c04",
|
|
923
|
+
models.CharField(
|
|
924
|
+
choices=[
|
|
925
|
+
("not_at_all", "Not at all"),
|
|
926
|
+
("slight", "Slight"),
|
|
927
|
+
("moderate", "Moderate"),
|
|
928
|
+
("extreme", "Extreme"),
|
|
929
|
+
("severe", "Severe"),
|
|
930
|
+
],
|
|
931
|
+
max_length=25,
|
|
932
|
+
verbose_name="Did you experience any burden or side effects?",
|
|
933
|
+
),
|
|
934
|
+
),
|
|
935
|
+
(
|
|
936
|
+
"c05",
|
|
937
|
+
models.CharField(
|
|
938
|
+
choices=[
|
|
939
|
+
("not_at_all", "Not at all"),
|
|
940
|
+
("slightly", "Slightly"),
|
|
941
|
+
("moderately", "Moderately"),
|
|
942
|
+
("highly", "Highly"),
|
|
943
|
+
("very_highly", "Very highly"),
|
|
944
|
+
],
|
|
945
|
+
max_length=25,
|
|
946
|
+
verbose_name="How acceptable was it to take the drug?",
|
|
947
|
+
),
|
|
948
|
+
),
|
|
949
|
+
(
|
|
950
|
+
"c06",
|
|
951
|
+
models.CharField(
|
|
952
|
+
choices=[
|
|
953
|
+
("very_difficult", "Very difficult"),
|
|
954
|
+
("difficult", "Difficult"),
|
|
955
|
+
("neutral", "Neutral"),
|
|
956
|
+
("easy", "Easy"),
|
|
957
|
+
("very_easy", "Very easy"),
|
|
958
|
+
],
|
|
959
|
+
max_length=25,
|
|
960
|
+
verbose_name="How easy was it to fit the medication into your routine?",
|
|
961
|
+
),
|
|
962
|
+
),
|
|
963
|
+
(
|
|
964
|
+
"c07",
|
|
965
|
+
models.CharField(
|
|
966
|
+
choices=[
|
|
967
|
+
("not_at_all", "Not at all"),
|
|
968
|
+
("slight", "Slight"),
|
|
969
|
+
("moderate", "Moderate"),
|
|
970
|
+
("extreme", "Extreme"),
|
|
971
|
+
("severe", "Severe"),
|
|
972
|
+
],
|
|
973
|
+
max_length=25,
|
|
974
|
+
verbose_name="How burdensome was taking part in the trial?",
|
|
975
|
+
),
|
|
976
|
+
),
|
|
977
|
+
(
|
|
978
|
+
"c08",
|
|
979
|
+
models.CharField(
|
|
980
|
+
choices=[
|
|
981
|
+
("strongly_disagree", "Strongly disagree"),
|
|
982
|
+
("disagree", "disagree"),
|
|
983
|
+
("neutral", "Neutral"),
|
|
984
|
+
("agree", "Agree"),
|
|
985
|
+
("strongly_agree", "Strongly agree"),
|
|
986
|
+
],
|
|
987
|
+
help_text="for example: future treatment, follow-up contact details",
|
|
988
|
+
max_length=25,
|
|
989
|
+
verbose_name="Overall, I was satisfied with the information I received about future support after the trial",
|
|
990
|
+
),
|
|
991
|
+
),
|
|
992
|
+
(
|
|
993
|
+
"c09",
|
|
994
|
+
models.CharField(
|
|
995
|
+
choices=[
|
|
996
|
+
("strongly_disagree", "Strongly disagree"),
|
|
997
|
+
("disagree", "disagree"),
|
|
998
|
+
("neutral", "Neutral"),
|
|
999
|
+
("agree", "Agree"),
|
|
1000
|
+
("strongly_agree", "Strongly agree"),
|
|
1001
|
+
],
|
|
1002
|
+
max_length=25,
|
|
1003
|
+
verbose_name="Overall, I was satisfied with my trial experience",
|
|
1004
|
+
),
|
|
1005
|
+
),
|
|
1006
|
+
(
|
|
1007
|
+
"c10",
|
|
1008
|
+
models.CharField(
|
|
1009
|
+
choices=[
|
|
1010
|
+
("much_less_expected", "Much less than expected"),
|
|
1011
|
+
("somewhat_less_expected", "Somewhat less than expected"),
|
|
1012
|
+
("same_as_expected", "Same as expected"),
|
|
1013
|
+
("somewhat_more_expected", "Somewhat more than expected"),
|
|
1014
|
+
("much_more_expected", "Much more than expected"),
|
|
1015
|
+
],
|
|
1016
|
+
max_length=25,
|
|
1017
|
+
verbose_name="Compared to when the trial started, the overall commitment required was similar to what I expected",
|
|
1018
|
+
),
|
|
1019
|
+
),
|
|
1020
|
+
(
|
|
1021
|
+
"site",
|
|
1022
|
+
models.ForeignKey(
|
|
1023
|
+
null=True,
|
|
1024
|
+
on_delete=django.db.models.deletion.PROTECT,
|
|
1025
|
+
related_name="+",
|
|
1026
|
+
to="sites.site",
|
|
1027
|
+
),
|
|
1028
|
+
),
|
|
1029
|
+
(
|
|
1030
|
+
"subject_visit",
|
|
1031
|
+
models.OneToOneField(
|
|
1032
|
+
on_delete=django.db.models.deletion.PROTECT,
|
|
1033
|
+
to="meta_subject.subjectvisit",
|
|
1034
|
+
),
|
|
1035
|
+
),
|
|
1036
|
+
],
|
|
1037
|
+
options={
|
|
1038
|
+
"verbose_name": "Feedback Questionnaire (SPFQ)",
|
|
1039
|
+
"verbose_name_plural": "Feedback Questionnaires (SPFQ)",
|
|
1040
|
+
"abstract": False,
|
|
1041
|
+
"default_permissions": (
|
|
1042
|
+
"add",
|
|
1043
|
+
"change",
|
|
1044
|
+
"delete",
|
|
1045
|
+
"view",
|
|
1046
|
+
"export",
|
|
1047
|
+
"import",
|
|
1048
|
+
),
|
|
1049
|
+
"default_manager_name": "objects",
|
|
1050
|
+
"indexes": [
|
|
1051
|
+
models.Index(
|
|
1052
|
+
fields=["subject_visit", "site"],
|
|
1053
|
+
name="meta_subjec_subject_7ecbde_idx",
|
|
1054
|
+
),
|
|
1055
|
+
models.Index(
|
|
1056
|
+
fields=["subject_visit", "report_datetime"],
|
|
1057
|
+
name="meta_subjec_subject_f51f0f_idx",
|
|
1058
|
+
),
|
|
1059
|
+
],
|
|
1060
|
+
},
|
|
1061
|
+
managers=[
|
|
1062
|
+
("objects", edc_visit_tracking.managers.CrfModelManager()),
|
|
1063
|
+
("on_site", edc_visit_tracking.managers.CrfCurrentSiteManager()),
|
|
1064
|
+
],
|
|
1065
|
+
),
|
|
1066
|
+
]
|