.
This commit is contained in:
+77
-61
@@ -1,5 +1,6 @@
|
|||||||
from django.shortcuts import render, get_object_or_404, redirect
|
from django.shortcuts import render, get_object_or_404, redirect
|
||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
# from django.contrib.auth.models import User
|
# from django.contrib.auth.models import User
|
||||||
from django.contrib.auth.decorators import login_required, user_passes_test
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
@@ -16,7 +17,16 @@ from django.urls import reverse_lazy, reverse
|
|||||||
from django.http import Http404, JsonResponse
|
from django.http import Http404, JsonResponse
|
||||||
from django.http import HttpResponseRedirect, HttpResponse
|
from django.http import HttpResponseRedirect, HttpResponse
|
||||||
|
|
||||||
from .forms import RapidForm, ImageFormSet, NoteForm, RegionForm, AbnormalityForm, ExaminationForm, AnswerFormSet, AnswerUpdateFormSet
|
from .forms import (
|
||||||
|
RapidForm,
|
||||||
|
ImageFormSet,
|
||||||
|
NoteForm,
|
||||||
|
RegionForm,
|
||||||
|
AbnormalityForm,
|
||||||
|
ExaminationForm,
|
||||||
|
AnswerFormSet,
|
||||||
|
AnswerUpdateFormSet,
|
||||||
|
)
|
||||||
from .models import Rapid, Note, Abnormality, Region, Examination
|
from .models import Rapid, Note, Abnormality, Region, Examination
|
||||||
from .tables import RapidTable
|
from .tables import RapidTable
|
||||||
from .filters import RapidFilter
|
from .filters import RapidFilter
|
||||||
@@ -33,13 +43,14 @@ from copy import deepcopy
|
|||||||
from django.forms.models import model_to_dict
|
from django.forms.models import model_to_dict
|
||||||
from rapids.forms import RapidCreationDefaultForm
|
from rapids.forms import RapidCreationDefaultForm
|
||||||
from rapids.models import RapidCreationDefault
|
from rapids.models import RapidCreationDefault
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class AuthorOrCheckerRequiredMixin(object):
|
class AuthorOrCheckerRequiredMixin(object):
|
||||||
def get_object(self, *args, **kwargs):
|
def get_object(self, *args, **kwargs):
|
||||||
obj = super(UpdateView, self).get_object(*args, **kwargs)
|
obj = super(UpdateView, self).get_object(*args, **kwargs)
|
||||||
if self.request.user.groups.filter(name='rapid_checker').exists():
|
if self.request.user.groups.filter(name="rapid_checker").exists():
|
||||||
return obj
|
return obj
|
||||||
if self.request.user not in obj.author.all():
|
if self.request.user not in obj.author.all():
|
||||||
raise PermissionDenied() # or Http404
|
raise PermissionDenied() # or Http404
|
||||||
@@ -50,10 +61,11 @@ class AuthorOrCheckerRequiredMixin(object):
|
|||||||
def index(request):
|
def index(request):
|
||||||
other_rapids = Rapid.objects.exclude(author=request.user.pk)
|
other_rapids = Rapid.objects.exclude(author=request.user.pk)
|
||||||
user_rapids = Rapid.objects.filter(author=request.user.pk)
|
user_rapids = Rapid.objects.filter(author=request.user.pk)
|
||||||
return render(request, "rapids/index.html", {
|
return render(
|
||||||
"other_rapids": other_rapids,
|
request,
|
||||||
"user_rapids": user_rapids
|
"rapids/index.html",
|
||||||
})
|
{"other_rapids": other_rapids, "user_rapids": user_rapids},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -65,7 +77,7 @@ def rapid_detail(request, pk):
|
|||||||
|
|
||||||
# logging.debug(rapid.rapid_notes.first())
|
# logging.debug(rapid.rapid_notes.first())
|
||||||
# logging.debug(rapid.subspecialty.first().name.all())
|
# logging.debug(rapid.subspecialty.first().name.all())
|
||||||
return render(request, 'rapids/rapid_detail.html', {'rapid': rapid})
|
return render(request, "rapids/rapid_detail.html", {"rapid": rapid})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -103,7 +115,7 @@ def rapid_split(request, pk):
|
|||||||
|
|
||||||
# logging.debug(rapid.rapid_notes.first())
|
# logging.debug(rapid.rapid_notes.first())
|
||||||
# logging.debug(rapid.subspecialty.first().name.all())
|
# logging.debug(rapid.subspecialty.first().name.all())
|
||||||
return render(request, 'rapids/rapid_detail.html', {'rapid': rapid})
|
return render(request, "rapids/rapid_detail.html", {"rapid": rapid})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -114,16 +126,15 @@ def author_detail(request, pk):
|
|||||||
|
|
||||||
rapids = Rapid.objects.filter(author=pk)
|
rapids = Rapid.objects.filter(author=pk)
|
||||||
|
|
||||||
return render(request, "rapids/category_detail.html", {
|
return render(
|
||||||
"category": author,
|
request, "rapids/category_detail.html", {"category": author, "rapids": rapids}
|
||||||
"rapids": rapids
|
)
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
def author_list(request):
|
def author_list(request):
|
||||||
authors = User.objects.all()
|
authors = User.objects.all()
|
||||||
|
|
||||||
return render(request, 'rapids/author_list.html', {'authors': authors})
|
return render(request, "rapids/author_list.html", {"authors": authors})
|
||||||
|
|
||||||
|
|
||||||
class RapidCreationDefaultView(LoginRequiredMixin, UpdateView):
|
class RapidCreationDefaultView(LoginRequiredMixin, UpdateView):
|
||||||
@@ -143,7 +154,8 @@ class RapidCreationDefaultView(LoginRequiredMixin, UpdateView):
|
|||||||
# return super().dispatch(request, *args, **kwargs)
|
# return super().dispatch(request, *args, **kwargs)
|
||||||
def get_object(self, queryset=None):
|
def get_object(self, queryset=None):
|
||||||
obj, create = RapidCreationDefault.objects.get_or_create(
|
obj, create = RapidCreationDefault.objects.get_or_create(
|
||||||
author=self.request.user)
|
author=self.request.user
|
||||||
|
)
|
||||||
|
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
@@ -174,7 +186,7 @@ class AddNote(LoginRequiredMixin, CreateView):
|
|||||||
Overridden so we can make sure the `Rapid` instance exists
|
Overridden so we can make sure the `Rapid` instance exists
|
||||||
before going any further.
|
before going any further.
|
||||||
"""
|
"""
|
||||||
self.pk = get_object_or_404(Rapid, pk=kwargs['pk'])
|
self.pk = get_object_or_404(Rapid, pk=kwargs["pk"])
|
||||||
return super().dispatch(request, *args, **kwargs)
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
@@ -236,11 +248,12 @@ class RapidCreateBase(LoginRequiredMixin, CreateView):
|
|||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(RapidCreateBase, self).get_context_data(**kwargs)
|
context = super(RapidCreateBase, self).get_context_data(**kwargs)
|
||||||
if self.request.POST:
|
if self.request.POST:
|
||||||
context['image_formset'] = ImageFormSet(self.request.POST,
|
context["image_formset"] = ImageFormSet(
|
||||||
self.request.FILES)
|
self.request.POST, self.request.FILES
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
context['image_formset'] = ImageFormSet()
|
context["image_formset"] = ImageFormSet()
|
||||||
context['answer_formset'] = AnswerFormSet()
|
context["answer_formset"] = AnswerFormSet()
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
@@ -251,8 +264,8 @@ class RapidCreateBase(LoginRequiredMixin, CreateView):
|
|||||||
form.instance.author.add(self.request.user.id)
|
form.instance.author.add(self.request.user.id)
|
||||||
|
|
||||||
context = self.get_context_data(form=form)
|
context = self.get_context_data(form=form)
|
||||||
image_formset = context['image_formset']
|
image_formset = context["image_formset"]
|
||||||
answer_formset = context['answer_formset']
|
answer_formset = context["answer_formset"]
|
||||||
if image_formset.is_valid() and answer_formset.is_valid():
|
if image_formset.is_valid() and answer_formset.is_valid():
|
||||||
response = super().form_valid(form)
|
response = super().form_valid(form)
|
||||||
image_formset.instance = self.object
|
image_formset.instance = self.object
|
||||||
@@ -264,7 +277,7 @@ class RapidCreateBase(LoginRequiredMixin, CreateView):
|
|||||||
return response
|
return response
|
||||||
# else we redirect to the clone url
|
# else we redirect to the clone url
|
||||||
else:
|
else:
|
||||||
return redirect('rapids:rapid_clone', pk=self.object.pk)
|
return redirect("rapids:rapid_clone", pk=self.object.pk)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return super().form_invalid(form)
|
return super().form_invalid(form)
|
||||||
@@ -273,13 +286,13 @@ class RapidCreateBase(LoginRequiredMixin, CreateView):
|
|||||||
# @login_required
|
# @login_required
|
||||||
class RapidCreate(RapidCreateBase):
|
class RapidCreate(RapidCreateBase):
|
||||||
|
|
||||||
initial = {'laterality': Rapid.NONE}
|
initial = {"laterality": Rapid.NONE}
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
# There has to be a better way...
|
# There has to be a better way...
|
||||||
try:
|
try:
|
||||||
s = (i.pk for i in self.request.user.rapid_default.site.all())
|
s = (i.pk for i in self.request.user.rapid_default.site.all())
|
||||||
self.initial.update({'site': s})
|
self.initial.update({"site": s})
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
return self.initial
|
return self.initial
|
||||||
@@ -296,8 +309,7 @@ class RapidCreate(RapidCreateBase):
|
|||||||
# return super().form_valid(form)
|
# return super().form_valid(form)
|
||||||
|
|
||||||
|
|
||||||
class RapidUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin,
|
class RapidUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView):
|
||||||
UpdateView):
|
|
||||||
model = Rapid
|
model = Rapid
|
||||||
form_class = RapidForm
|
form_class = RapidForm
|
||||||
|
|
||||||
@@ -308,13 +320,17 @@ class RapidUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin,
|
|||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(RapidUpdate, self).get_context_data(**kwargs)
|
context = super(RapidUpdate, self).get_context_data(**kwargs)
|
||||||
if self.request.POST:
|
if self.request.POST:
|
||||||
context['image_formset'] = ImageFormSet(self.request.POST,
|
context["image_formset"] = ImageFormSet(
|
||||||
self.request.FILES,
|
self.request.POST, self.request.FILES, instance=self.object
|
||||||
instance=self.object)
|
)
|
||||||
context['image_formset'].full_clean()
|
context["image_formset"].full_clean()
|
||||||
|
context["answer_formset"] = AnswerFormSet(
|
||||||
|
self.request.POST, instance=self.object
|
||||||
|
)
|
||||||
|
context["answer_formset"].full_clean()
|
||||||
else:
|
else:
|
||||||
context['image_formset'] = ImageFormSet(instance=self.object)
|
context["image_formset"] = ImageFormSet(instance=self.object)
|
||||||
context['answer_formset'] = AnswerFormSet(instance=self.object)
|
context["answer_formset"] = AnswerFormSet(instance=self.object)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
@@ -325,8 +341,8 @@ class RapidUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin,
|
|||||||
form.instance.author.add(self.request.user.id)
|
form.instance.author.add(self.request.user.id)
|
||||||
|
|
||||||
context = self.get_context_data(form=form)
|
context = self.get_context_data(form=form)
|
||||||
image_formset = context['image_formset']
|
image_formset = context["image_formset"]
|
||||||
answer_formset = context['answer_formset']
|
answer_formset = context["answer_formset"]
|
||||||
# logger.debug(formset.is_valid())
|
# logger.debug(formset.is_valid())
|
||||||
if image_formset.is_valid() and answer_formset.is_valid():
|
if image_formset.is_valid() and answer_formset.is_valid():
|
||||||
response = super().form_valid(form)
|
response = super().form_valid(form)
|
||||||
@@ -348,8 +364,8 @@ class RapidClone(RapidCreateBase):
|
|||||||
# exclude = [ 'created_date', 'published_date' ]
|
# exclude = [ 'created_date', 'published_date' ]
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
# print(self.request)
|
# print(self.request)
|
||||||
old_object = get_object_or_404(Rapid, pk=self.kwargs['pk'])
|
old_object = get_object_or_404(Rapid, pk=self.kwargs["pk"])
|
||||||
initial_data = model_to_dict(old_object, exclude=['id'])
|
initial_data = model_to_dict(old_object, exclude=["id"])
|
||||||
|
|
||||||
return initial_data
|
return initial_data
|
||||||
|
|
||||||
@@ -364,7 +380,7 @@ def rapid_scrap(request, pk):
|
|||||||
|
|
||||||
rapid.scrapped = not rapid.scrapped
|
rapid.scrapped = not rapid.scrapped
|
||||||
rapid.save()
|
rapid.save()
|
||||||
return HttpResponseRedirect(reverse('rapids:rapid_detail', args=(pk, )))
|
return HttpResponseRedirect(reverse("rapids:rapid_detail", args=(pk,)))
|
||||||
|
|
||||||
|
|
||||||
# @login_required
|
# @login_required
|
||||||
@@ -384,22 +400,22 @@ def create_abnormality(request):
|
|||||||
instance = form.save()
|
instance = form.save()
|
||||||
return HttpResponse(
|
return HttpResponse(
|
||||||
'<script>opener.closePopup(window, "%s", "%s", "#id_abnormality");</script>'
|
'<script>opener.closePopup(window, "%s", "%s", "#id_abnormality");</script>'
|
||||||
% (instance.pk, instance))
|
% (instance.pk, instance)
|
||||||
return render(request, "rapids/create_simple.html", {
|
)
|
||||||
'form': form,
|
return render(
|
||||||
'name': "Abnormality"
|
request, "rapids/create_simple.html", {"form": form, "name": "Abnormality"}
|
||||||
})
|
)
|
||||||
|
|
||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
def get_abnormality_id(request):
|
def get_abnormality_id(request):
|
||||||
if request.is_ajax():
|
if request.is_ajax():
|
||||||
abnormality_name = request.GET['abnormality_name']
|
abnormality_name = request.GET["abnormality_name"]
|
||||||
abnormality_id = Abnormality.objects.get(name=abnormality_name).id
|
abnormality_id = Abnormality.objects.get(name=abnormality_name).id
|
||||||
data = {
|
data = {
|
||||||
'abnormality_id': abnormality_id,
|
"abnormality_id": abnormality_id,
|
||||||
}
|
}
|
||||||
return HttpResponse(json.dumps(data), content_type='application/json')
|
return HttpResponse(json.dumps(data), content_type="application/json")
|
||||||
return HttpResponse("/")
|
return HttpResponse("/")
|
||||||
|
|
||||||
|
|
||||||
@@ -410,22 +426,22 @@ def create_examination(request):
|
|||||||
instance = form.save()
|
instance = form.save()
|
||||||
return HttpResponse(
|
return HttpResponse(
|
||||||
'<script>opener.closePopup(window, "%s", "%s", "#id_examination");</script>'
|
'<script>opener.closePopup(window, "%s", "%s", "#id_examination");</script>'
|
||||||
% (instance.pk, instance))
|
% (instance.pk, instance)
|
||||||
return render(request, "rapids/create_simple.html", {
|
)
|
||||||
'form': form,
|
return render(
|
||||||
'name': "Examination"
|
request, "rapids/create_simple.html", {"form": form, "name": "Examination"}
|
||||||
})
|
)
|
||||||
|
|
||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
def get_examination_id(request):
|
def get_examination_id(request):
|
||||||
if request.is_ajax():
|
if request.is_ajax():
|
||||||
examination_name = request.GET['examination_name']
|
examination_name = request.GET["examination_name"]
|
||||||
examination_id = Examination.objects.get(name=examination_name).id
|
examination_id = Examination.objects.get(name=examination_name).id
|
||||||
data = {
|
data = {
|
||||||
'examination_id': examination_id,
|
"examination_id": examination_id,
|
||||||
}
|
}
|
||||||
return HttpResponse(json.dumps(data), content_type='application/json')
|
return HttpResponse(json.dumps(data), content_type="application/json")
|
||||||
return HttpResponse("/")
|
return HttpResponse("/")
|
||||||
|
|
||||||
|
|
||||||
@@ -436,22 +452,22 @@ def create_region(request):
|
|||||||
instance = form.save()
|
instance = form.save()
|
||||||
return HttpResponse(
|
return HttpResponse(
|
||||||
'<script>opener.closePopup(window, "%s", "%s", "#id_region");</script>'
|
'<script>opener.closePopup(window, "%s", "%s", "#id_region");</script>'
|
||||||
% (instance.pk, instance))
|
% (instance.pk, instance)
|
||||||
return render(request, "rapids/create_simple.html", {
|
)
|
||||||
'form': form,
|
return render(
|
||||||
'name': "Region"
|
request, "rapids/create_simple.html", {"form": form, "name": "Region"}
|
||||||
})
|
)
|
||||||
|
|
||||||
|
|
||||||
@csrf_exempt
|
@csrf_exempt
|
||||||
def get_region_id(request):
|
def get_region_id(request):
|
||||||
if request.is_ajax():
|
if request.is_ajax():
|
||||||
region_name = request.GET['region_name']
|
region_name = request.GET["region_name"]
|
||||||
region_id = Region.objects.get(name=region_name).id
|
region_id = Region.objects.get(name=region_name).id
|
||||||
data = {
|
data = {
|
||||||
'region_id': region_id,
|
"region_id": region_id,
|
||||||
}
|
}
|
||||||
return HttpResponse(json.dumps(data), content_type='application/json')
|
return HttpResponse(json.dumps(data), content_type="application/json")
|
||||||
return HttpResponse("/")
|
return HttpResponse("/")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user