This commit is contained in:
Ross
2021-05-02 16:12:30 +01:00
parent 74aa6c7afc
commit a537561217
6 changed files with 37 additions and 73 deletions
+4
View File
@@ -18,6 +18,8 @@ from generic.models import Examination, ExamBase
from collections import defaultdict from collections import defaultdict
from helpers.images import image_as_base64 from helpers.images import image_as_base64
import reversion
image_storage = FileSystemStorage( image_storage = FileSystemStorage(
# Physical file location ROOT # Physical file location ROOT
location=u"{0}/".format(settings.MEDIA_ROOT), location=u"{0}/".format(settings.MEDIA_ROOT),
@@ -66,6 +68,7 @@ class QuestionType(models.Model):
return self.text return self.text
@reversion.register
class AnatomyQuestion(models.Model): class AnatomyQuestion(models.Model):
# author = models.ForeignKey('auth.User', on_delete=models.CASCADE) # author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
# image = models.ImageField() # image = models.ImageField()
@@ -269,6 +272,7 @@ class Answer(models.Model):
# self.answer.strip() # self.answer.strip()
@reversion.register
class Exam(ExamBase): class Exam(ExamBase):
app_name = "anatomy" app_name = "anatomy"
+7 -6
View File
@@ -47,6 +47,7 @@ from .models import (
) )
from generic.models import Examination from generic.models import Examination
from generic.views import ExamViews from generic.views import ExamViews
from reversion.views import RevisionMixin
from .decorators import user_is_author_or_anatomy_checker from .decorators import user_is_author_or_anatomy_checker
@@ -694,7 +695,7 @@ def exam_scores_cid_user(request, pk, sk):
# ) # )
class AnatomyQuestionCreateBase(LoginRequiredMixin, CreateView): class AnatomyQuestionCreateBase(RevisionMixin, LoginRequiredMixin, CreateView):
model = AnatomyQuestion model = AnatomyQuestion
form_class = AnatomyQuestionForm form_class = AnatomyQuestionForm
@@ -799,7 +800,7 @@ class AnatomyQuestionCreate(AnatomyQuestionCreateBase):
# class AnatomyQuestionUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, # class AnatomyQuestionUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin,
class AnatomyQuestionUpdate(AuthorOrCheckerRequiredMixin, UpdateView): class AnatomyQuestionUpdate(RevisionMixin, AuthorOrCheckerRequiredMixin, UpdateView):
model = AnatomyQuestion model = AnatomyQuestion
form_class = AnatomyQuestionForm form_class = AnatomyQuestionForm
@@ -989,7 +990,7 @@ class QuestionDelete(AuthorOrCheckerRequiredMixin, DeleteView):
model = AnatomyQuestion model = AnatomyQuestion
success_url = reverse_lazy("anatomy:anatomy_question_view") success_url = reverse_lazy("anatomy:anatomy_question_view")
class ExamCreate(LoginRequiredMixin, CreateView): class ExamCreate(RevisionMixin, LoginRequiredMixin, CreateView):
model = Exam model = Exam
form_class = ExamForm form_class = ExamForm
@@ -1000,7 +1001,7 @@ class ExamCreate(LoginRequiredMixin, CreateView):
form.instance.author.add(self.request.user.id) form.instance.author.add(self.request.user.id)
return super().form_valid(form) return super().form_valid(form)
class ExamUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): class ExamUpdate(RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView):
model = Exam model = Exam
form_class = ExamForm form_class = ExamForm
@@ -1011,7 +1012,7 @@ class ExamUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView):
form.instance.author.add(self.request.user.id) form.instance.author.add(self.request.user.id)
return super().form_valid(form) return super().form_valid(form)
class ExamViewSet(viewsets.ModelViewSet): class ExamViewSet(RevisionMixin, viewsets.ModelViewSet):
#queryset = Exam.objects.all().order_by('name') #queryset = Exam.objects.all().order_by('name')
serializer_class = ExamSerializer serializer_class = ExamSerializer
permission_classes = [permissions.IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
@@ -1026,6 +1027,6 @@ class ExamViewSet(viewsets.ModelViewSet):
return Exam.objects.filter(author__id=user.id) return Exam.objects.filter(author__id=user.id)
class ExamDelete(AuthorOrCheckerRequiredMixin, DeleteView): class ExamDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
model = Exam model = Exam
success_url = reverse_lazy("anatomy:index") success_url = reverse_lazy("anatomy:index")
+5
View File
@@ -38,6 +38,8 @@ from easy_thumbnails.exceptions import InvalidImageFormatError
import pydicom import pydicom
import datetime import datetime
import reversion
image_storage = FileSystemStorage( image_storage = FileSystemStorage(
@@ -61,6 +63,7 @@ def findMiddle(input_list):
return (input_list[int(middle)], input_list[int(middle - 1)]) return (input_list[int(middle)], input_list[int(middle - 1)])
@reversion.register
class Long(models.Model): class Long(models.Model):
# author = models.ForeignKey('auth.User', on_delete=models.CASCADE) # author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
# image = models.ImageField() # image = models.ImageField()
@@ -281,6 +284,7 @@ class LongSeriesImage(models.Model):
ordering = ['position'] ordering = ['position']
@reversion.register
class LongSeries(models.Model): class LongSeries(models.Model):
modality = models.ForeignKey( modality = models.ForeignKey(
Modality, related_name="series_modality", on_delete=models.SET_NULL, null=True Modality, related_name="series_modality", on_delete=models.SET_NULL, null=True
@@ -512,6 +516,7 @@ class LongCreationDefault(models.Model):
return reverse("longs:long_create") return reverse("longs:long_create")
@reversion.register
class Exam(ExamBase): class Exam(ExamBase):
app_name = "longs" app_name = "longs"
+8 -59
View File
@@ -58,6 +58,7 @@ from longs.forms import LongCreationDefaultForm
from longs.models import LongCreationDefault from longs.models import LongCreationDefault
from generic.views import ExamViews from generic.views import ExamViews
from reversion.views import RevisionMixin
from rest_framework import viewsets from rest_framework import viewsets
@@ -245,11 +246,11 @@ class AddNote(LoginRequiredMixin, CreateView):
#def long_delete(request, pk): #def long_delete(request, pk):
#q = get_object_or_404(Long, pk=pk) #q = get_object_or_404(Long, pk=pk)
#q.delete() #q.delete()
class LongDelete(AuthorOrCheckerRequiredMixin, DeleteView): class LongDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
model = Long model = Long
success_url = reverse_lazy("longs:long_view") success_url = reverse_lazy("longs:long_view")
class LongSeriesDelete(AuthorOrCheckerRequiredMixin, DeleteView): class LongSeriesDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
model = LongSeries model = LongSeries
success_url = reverse_lazy("longs:long_series_view") success_url = reverse_lazy("longs:long_series_view")
@@ -285,7 +286,7 @@ def long_clone(request, pk):
return render(request, "longs/long_form.html", context) return render(request, "longs/long_form.html", context)
class LongSeriesCreate(LoginRequiredMixin, CreateView): class LongSeriesCreate(RevisionMixin, LoginRequiredMixin, CreateView):
model = LongSeries model = LongSeries
form_class = LongSeriesForm form_class = LongSeriesForm
@@ -329,7 +330,7 @@ class LongSeriesCreate(LoginRequiredMixin, CreateView):
else: else:
return super().form_invalid(form) return super().form_invalid(form)
class LongSeriesUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): class LongSeriesUpdate(RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView):
model = LongSeries model = LongSeries
form_class = LongSeriesForm form_class = LongSeriesForm
@@ -371,7 +372,7 @@ class LongSeriesUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateV
else: else:
return super().form_invalid(form) return super().form_invalid(form)
class LongCreateBase(LoginRequiredMixin, CreateView): class LongCreateBase(RevisionMixin, LoginRequiredMixin, CreateView):
model = Long model = Long
form_class = LongForm form_class = LongForm
@@ -441,7 +442,7 @@ class LongCreate(LongCreateBase):
# return super().form_valid(form) # return super().form_valid(form)
class LongUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): class LongUpdate(RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView):
model = Long model = Long
form_class = LongForm form_class = LongForm
@@ -522,32 +523,6 @@ def long_scrap(request, pk):
# return render(request, "longs/create_simple.html", {'form': form}) # return render(request, "longs/create_simple.html", {'form': form})
@login_required
def create_abnormality(request):
form = AbnormalityForm(request.POST or None)
if form.is_valid():
instance = form.save()
return HttpResponse(
'<script>opener.closePopup(window, "%s", "%s", "#id_abnormality");</script>'
% (instance.pk, instance)
)
return render(
request, "longs/create_simple.html", {"form": form, "name": "Abnormality"}
)
@csrf_exempt
def get_abnormality_id(request):
if request.is_ajax():
abnormality_name = request.GET["abnormality_name"]
abnormality_id = Abnormality.objects.get(name=abnormality_name).id
data = {
"abnormality_id": abnormality_id,
}
return HttpResponse(json.dumps(data), content_type="application/json")
return HttpResponse("/")
@login_required @login_required
def create_examination(request): def create_examination(request):
form = ExaminationForm(request.POST or None) form = ExaminationForm(request.POST or None)
@@ -574,32 +549,6 @@ def get_examination_id(request):
return HttpResponse("/") return HttpResponse("/")
@login_required
def create_region(request):
form = RegionForm(request.POST or None)
if form.is_valid():
instance = form.save()
return HttpResponse(
'<script>opener.closePopup(window, "%s", "%s", "#id_region");</script>'
% (instance.pk, instance)
)
return render(
request, "longs/create_simple.html", {"form": form, "name": "Region"}
)
@csrf_exempt
def get_region_id(request):
if request.is_ajax():
region_name = request.GET["region_name"]
region_id = Region.objects.get(name=region_name).id
data = {
"region_id": region_id,
}
return HttpResponse(json.dumps(data), content_type="application/json")
return HttpResponse("/")
class LongView(LoginRequiredMixin, SingleTableMixin, FilterView): class LongView(LoginRequiredMixin, SingleTableMixin, FilterView):
model = Long model = Long
table_class = LongTable table_class = LongTable
@@ -997,7 +946,7 @@ def long_series_order_upload_filename(request, pk):
LongExamViews = ExamViews(Exam, Long, "longs", "long", loadJsonAnswer) LongExamViews = ExamViews(Exam, Long, "longs", "long", loadJsonAnswer)
class ExamViewSet(viewsets.ModelViewSet): class ExamViewSet(RevisionMixin, viewsets.ModelViewSet):
queryset = Exam.objects.all().order_by('name') queryset = Exam.objects.all().order_by('name')
serializer_class = ExamSerializer serializer_class = ExamSerializer
+4 -1
View File
@@ -22,6 +22,8 @@ from helpers.images import image_as_base64
from generic.models import Site, Condition, Sign, ExamBase from generic.models import Site, Condition, Sign, ExamBase
import reversion
image_storage = FileSystemStorage( image_storage = FileSystemStorage(
# Physical file location ROOT # Physical file location ROOT
location=u"{0}".format(settings.MEDIA_ROOT), location=u"{0}".format(settings.MEDIA_ROOT),
@@ -104,6 +106,7 @@ class Answer(models.Model):
self.answer_compare = s self.answer_compare = s
@reversion.register
class Rapid(models.Model): class Rapid(models.Model):
#author = models.ForeignKey('auth.User', on_delete=models.CASCADE) #author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
#image = models.ImageField() #image = models.ImageField()
@@ -349,7 +352,7 @@ class RapidCreationDefault(models.Model):
def get_absolute_url(self): def get_absolute_url(self):
return reverse('rapids:rapid_create') return reverse('rapids:rapid_create')
@reversion.register
class Exam(ExamBase): class Exam(ExamBase):
app_name = "rapids" app_name = "rapids"
+9 -7
View File
@@ -43,6 +43,8 @@ from .models import (
from generic.views import ExamViews from generic.views import ExamViews
from reversion.views import RevisionMixin
from .tables import RapidTable, RapidUserAnswerTable from .tables import RapidTable, RapidUserAnswerTable
from .filters import RapidFilter, RapidUserAnswerFilter from .filters import RapidFilter, RapidUserAnswerFilter
@@ -268,7 +270,7 @@ def rapid_clone(request, pk):
return render(request, "rapids/rapid_form.html", context) return render(request, "rapids/rapid_form.html", context)
class RapidCreateBase(LoginRequiredMixin, CreateView): class RapidCreateBase(RevisionMixin, LoginRequiredMixin, CreateView):
model = Rapid model = Rapid
form_class = RapidForm form_class = RapidForm
@@ -353,7 +355,7 @@ class RapidCreate(RapidCreateBase):
# return super().form_valid(form) # return super().form_valid(form)
class RapidUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): class RapidUpdate(RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView):
model = Rapid model = Rapid
form_class = RapidForm form_class = RapidForm
@@ -928,7 +930,7 @@ class QuestionDelete(AuthorOrCheckerRequiredMixin, DeleteView):
RapidExamViews = ExamViews(Exam, Rapid, "rapids", "rapid", loadJsonAnswer) RapidExamViews = ExamViews(Exam, Rapid, "rapids", "rapid", loadJsonAnswer)
class ExamCreate(LoginRequiredMixin, CreateView): class ExamCreate(RevisionMixin, LoginRequiredMixin, CreateView):
model = Exam model = Exam
form_class = ExamForm form_class = ExamForm
@@ -939,7 +941,7 @@ class ExamCreate(LoginRequiredMixin, CreateView):
form.instance.author.add(self.request.user.id) form.instance.author.add(self.request.user.id)
return super().form_valid(form) return super().form_valid(form)
class ExamUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView): class ExamUpdate(RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView):
model = Exam model = Exam
form_class = ExamForm form_class = ExamForm
@@ -970,7 +972,7 @@ class StandardResultsSetPagination(PageNumberPagination):
page_size = 100 page_size = 100
page_size_query_param = 'page_size' page_size_query_param = 'page_size'
max_page_size = 1000 max_page_size = 1000
class ExamViewSet(viewsets.ModelViewSet): class ExamViewSet(RevisionMixin, viewsets.ModelViewSet):
#queryset = Exam.objects.all().order_by('name') #queryset = Exam.objects.all().order_by('name')
serializer_class = ExamSerializer serializer_class = ExamSerializer
@@ -995,12 +997,12 @@ class UserAnswerViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
class RapidViewSet(viewsets.ModelViewSet): class RapidViewSet(RevisionMixin, viewsets.ModelViewSet):
queryset = Rapid.objects.all()#.order_by('name') queryset = Rapid.objects.all()#.order_by('name')
serializer_class = RapidSerializer serializer_class = RapidSerializer
permission_classes = [permissions.IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
pagination_class = StandardResultsSetPagination pagination_class = StandardResultsSetPagination
class ExamDelete(AuthorOrCheckerRequiredMixin, DeleteView): class ExamDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
model = Exam model = Exam
success_url = reverse_lazy("rapids:index") success_url = reverse_lazy("rapids:index")