This commit is contained in:
Ross
2021-01-21 20:00:11 +00:00
parent 5969b9b7fd
commit 70e863190f
+101 -85
View File
@@ -1,6 +1,7 @@
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
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
@@ -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,16 +43,17 @@ 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
return obj return obj
@@ -50,22 +61,23 @@ 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
def rapid_detail(request, pk): def rapid_detail(request, pk):
rapid = get_object_or_404(Rapid, pk=pk) rapid = get_object_or_404(Rapid, pk=pk)
#if request.user not in rapid.author.all(): # if request.user not in rapid.author.all():
# raise PermissionDenied # raise PermissionDenied
#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
@@ -96,34 +108,33 @@ def rapid_split(request, pk):
images[n].rapid = rapid images[n].rapid = rapid
images[n].save() images[n].save()
#images[-1].rapid # images[-1].rapid
#if request.user not in rapid.author.all(): # if request.user not in rapid.author.all():
# raise PermissionDenied # raise PermissionDenied
#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
def author_detail(request, pk): def author_detail(request, pk):
#logging.debug(Author.objects.all()) # logging.debug(Author.objects.all())
#author = get_object_or_404(Author, pk=pk) # author = get_object_or_404(Author, pk=pk)
author = User.objects.get(pk=pk) author = User.objects.get(pk=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
@@ -158,7 +170,7 @@ class RapidCreationDefaultView(LoginRequiredMixin, UpdateView):
return response return response
#form.instance.author.add(self.request.user.id) # form.instance.author.add(self.request.user.id)
class AddNote(LoginRequiredMixin, CreateView): class AddNote(LoginRequiredMixin, CreateView):
@@ -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):
@@ -190,14 +202,14 @@ class AddNote(LoginRequiredMixin, CreateView):
return response return response
#form.instance.author.add(self.request.user.id) # form.instance.author.add(self.request.user.id)
@login_required @login_required
def rapid_clone(request, pk): def rapid_clone(request, pk):
new_item = get_object_or_404(Rapid, pk=pk) new_item = get_object_or_404(Rapid, pk=pk)
new_item.pk = None #autogen a new pk (item_id) new_item.pk = None # autogen a new pk (item_id)
#new_item.name = "Copy of " + new_item.name #need to change uniques # new_item.name = "Copy of " + new_item.name #need to change uniques
form = RapidForm(request.POST or None, instance=new_item) form = RapidForm(request.POST or None, instance=new_item)
@@ -207,7 +219,7 @@ def rapid_clone(request, pk):
if form.is_valid(): if form.is_valid():
form.instance.author.add(request.user.id) form.instance.author.add(request.user.id)
#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)
image_formset.instance = obj image_formset.instance = obj
@@ -223,7 +235,7 @@ def rapid_clone(request, pk):
"form": form, "form": form,
"image_formset": image_formset, "image_formset": image_formset,
"answer_formset": answer_formset "answer_formset": answer_formset
#other context # other context
} }
return render(request, "rapids/rapid_form.html", context) return render(request, "rapids/rapid_form.html", context)
@@ -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,22 +277,22 @@ 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)
#@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
@@ -289,15 +302,14 @@ class RapidCreate(RapidCreateBase):
# #initial = {'date_of_death': '05/01/2018'} # #initial = {'date_of_death': '05/01/2018'}
# exclude = [ 'created_date', 'published_date' ] # exclude = [ 'created_date', 'published_date' ]
#self.object = form.save(commit=False) # self.object = form.save(commit=False)
#self.object.save() # self.object.save()
#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 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,9 +341,9 @@ 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)
image_formset.instance = self.object image_formset.instance = self.object
@@ -347,9 +363,9 @@ class RapidClone(RapidCreateBase):
# #initial = {'date_of_death': '05/01/2018'} # #initial = {'date_of_death': '05/01/2018'}
# 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("/")