diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..07129c03 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +media/ diff --git a/anatomy/migrations/0001_initial.py b/anatomy/migrations/0001_initial.py new file mode 100644 index 00000000..383a5a20 --- /dev/null +++ b/anatomy/migrations/0001_initial.py @@ -0,0 +1,147 @@ +# Generated by Django 3.1.2 on 2020-10-16 19:07 + +import anatomy.models +from django.conf import settings +import django.core.files.storage +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='AnatomyQuestion', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('image', models.ImageField(storage=django.core.files.storage.FileSystemStorage(base_url='http://161.35.163.87//media/anatomy/', location='/home/ross/scripts/sites/rad/media//anatomy/'), upload_to=anatomy.models.image_directory_path)), + ('description', models.CharField(help_text="Short description of the image e.g. 'Sagittal CT Chest, Abdomen & Pelvis', will be displayed as the title.", max_length=400)), + ('created_date', models.DateTimeField(default=django.utils.timezone.now)), + ], + ), + migrations.CreateModel( + name='BodyPart', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('bodypart', models.CharField(max_length=200)), + ], + ), + migrations.CreateModel( + name='Exam', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ('exam_questions', models.ManyToManyField(related_name='exams', to='anatomy.AnatomyQuestion')), + ], + ), + migrations.CreateModel( + name='Examination', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('examination', models.CharField(max_length=200)), + ], + ), + migrations.CreateModel( + name='Modality', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('modality', models.CharField(max_length=200)), + ], + ), + migrations.CreateModel( + name='QuestionType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.CharField(max_length=400)), + ], + ), + migrations.CreateModel( + name='Structure', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('bodypart', models.CharField(max_length=200)), + ], + ), + migrations.CreateModel( + name='UserAnswer', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('answer', models.CharField(blank=True, max_length=500)), + ('cid', models.IntegerField(blank=True, null=True)), + ('flagged', models.BooleanField(default=False)), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ('exam', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='exam', to='anatomy.exam')), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_answers', to='anatomy.anatomyquestion')), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='IncorrectAnswers', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('answer', models.CharField(max_length=500)), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='incorrect_answers', to='anatomy.anatomyquestion')), + ], + ), + migrations.CreateModel( + name='HalfMarkAnswers', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('answer', models.CharField(max_length=500)), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='half_mark_answers', to='anatomy.anatomyquestion')), + ], + ), + migrations.CreateModel( + name='CidUserAnswer', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('answer', models.CharField(blank=True, max_length=500)), + ('cid', models.IntegerField(blank=True, null=True)), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ('exam', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='cid_user_answers', to='anatomy.exam')), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cid_user_answers', to='anatomy.anatomyquestion')), + ], + ), + migrations.CreateModel( + name='Answers', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('answer', models.CharField(max_length=500)), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='anatomy.anatomyquestion')), + ], + ), + migrations.AddField( + model_name='anatomyquestion', + name='body_part', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='anatomy.bodypart'), + ), + migrations.AddField( + model_name='anatomyquestion', + name='examination', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='anatomy.examination'), + ), + migrations.AddField( + model_name='anatomyquestion', + name='modality', + field=models.ForeignKey(help_text='Modality of the image', null=True, on_delete=django.db.models.deletion.SET_NULL, to='anatomy.modality'), + ), + migrations.AddField( + model_name='anatomyquestion', + name='question_type', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='anatomy.questiontype'), + ), + migrations.AddField( + model_name='anatomyquestion', + name='structure', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='anatomy.structure'), + ), + ] diff --git a/anatomy/migrations/0002_exam_active.py b/anatomy/migrations/0002_exam_active.py new file mode 100644 index 00000000..4fc645aa --- /dev/null +++ b/anatomy/migrations/0002_exam_active.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.2 on 2020-10-16 19:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('anatomy', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='exam', + name='active', + field=models.BooleanField(default=True, help_text='If an exam should be available'), + ), + ] diff --git a/anatomy/migrations/__init__.py b/anatomy/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/anatomy/models.py b/anatomy/models.py index 7445441f..8cba716a 100644 --- a/anatomy/models.py +++ b/anatomy/models.py @@ -171,6 +171,8 @@ class Exam(models.Model): exam_questions = models.ManyToManyField(AnatomyQuestion, related_name="exams") + active = models.BooleanField(help_text="If an exam should be available", default=True) + def __str__(self): return self.name diff --git a/anatomy/templates/anatomy/exam.html b/anatomy/templates/anatomy/exam.html index 23500cb9..d98295ac 100644 --- a/anatomy/templates/anatomy/exam.html +++ b/anatomy/templates/anatomy/exam.html @@ -14,7 +14,7 @@ dataType: 'json', success: function (data) { console.log(data.flagged); - if (data.flagged) { + if(data.flagged) { $("#flagged-button").text("Flagged"); $("#flagged-button").attr("class", "flagged"); @@ -27,7 +27,7 @@ }); $("#id_answer").keyup(function (event) { - if (event.keyCode == 13) { + if(event.keyCode == 13) { $(".btn-default").click(); } }); @@ -64,7 +64,7 @@