This commit is contained in:
Ross
2022-03-27 10:55:33 +01:00
parent 6500428cd9
commit 8b34b679ba
5 changed files with 421 additions and 343 deletions
+33 -3
View File
@@ -1,11 +1,13 @@
from django.contrib.admin import widgets from django.contrib.admin import widgets
from django.forms import ( from django.forms import (
BaseInlineFormSet,
Form, Form,
ModelForm, ModelForm,
ModelMultipleChoiceField, ModelMultipleChoiceField,
ModelChoiceField, ModelChoiceField,
ChoiceField, ChoiceField,
CharField, CharField,
modelformset_factory,
) )
from django.forms import inlineformset_factory from django.forms import inlineformset_factory
@@ -122,6 +124,9 @@ class SeriesForm(ModelForm):
js = ["jsi18n.js", "tesseract.min.js"] js = ["jsi18n.js", "tesseract.min.js"]
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.user = kwargs.pop(
"user"
) # To get request.user. Do not use kwargs.pop('user', None) due to potential security hole
if kwargs.get("instance"): if kwargs.get("instance"):
# We get the 'initial' keyword argument or initialize it # We get the 'initial' keyword argument or initialize it
# as a dict if it didn't exist. # as a dict if it didn't exist.
@@ -143,7 +148,12 @@ class SeriesForm(ModelForm):
ModelForm.__init__(self, *args, **kwargs) ModelForm.__init__(self, *args, **kwargs)
if self.user.groups.filter(name="atlas_editor").exists():
case_queryset = Case.objects.all() case_queryset = Case.objects.all()
else:
case_queryset = Case.objects.filter(
author__id=self.user.id
) #| Case.objects.filter(open_access=True)
self.fields["case"] = ModelMultipleChoiceField( self.fields["case"] = ModelMultipleChoiceField(
required=False, required=False,
@@ -216,6 +226,18 @@ class CaseForm(ModelForm):
ModelForm.__init__(self, *args, **kwargs) ModelForm.__init__(self, *args, **kwargs)
super(CaseForm, self).__init__(*args, **kwargs) super(CaseForm, self).__init__(*args, **kwargs)
print(1)
# self.fields["series"].queryset =
def get_queryset(self, request):
return (
super()
.get_queryset(request)
.prefetch_related(
"condition", "subspecialty", "pathological_process", "series"
)
)
class Meta: class Meta:
model = Case model = Case
@@ -291,14 +313,23 @@ CaseDifferentialFormSet = inlineformset_factory(
}, },
) )
class BaseSeriesFormSet(BaseInlineFormSet):
def __init__(self, *args, **kwargs):
super(BaseSeriesFormSet, self).__init__(*args, **kwargs)
self.queryset = Series.case.through.objects.filter(series__author__id=99)
#for form in self.forms:
# form.fields['series'].queryset = series_queryset
SeriesFormSet = inlineformset_factory( SeriesFormSet = inlineformset_factory(
Case, Case,
Series.case.through, Series.case.through,
formset=BaseSeriesFormSet,
exclude=[], exclude=[],
can_delete=True, can_delete=True,
extra=0, extra=1,
max_num=10, max_num=10,
field_classes="testing",
) )
@@ -309,5 +340,4 @@ SeriesImageFormSet = inlineformset_factory(
can_delete=True, can_delete=True,
extra=0, extra=0,
max_num=2000, max_num=2000,
field_classes="testing",
) )
+4
View File
@@ -400,6 +400,10 @@ class Series(models.Model):
) )
def __str__(self): def __str__(self):
return f"{self.pk}:{self.description}"
def get_full_str(self):
if self.case: if self.case:
case_id = ", ".format([case.pk for case in self.case.all()]) case_id = ", ".format([case.pk for case in self.case.all()])
# case_id = self.case.pk # case_id = self.case.pk
+44 -15
View File
@@ -1,9 +1,21 @@
{% extends 'atlas/base.html' %} {% extends 'atlas/base.html' %}
{% block content %} {% block content %}
<h2>Case {{case_number|add:1}}</h2> <h2>Case {{case_number|add:1}}
<div class="pre-whitespace multi-image-block"> {% if collection.show_title %}
: {{case.title}}
{% endif %}
</h2>
{% if collection.show_description and case.description%}
<div>
Description: {{case.description}}
</div>
{% endif %}
<div class="pre-whitespace multi-image-block">
{% for series in series_list %} {% for series in series_list %}
<span class="series-block"> <span class="series-block">
<span> <span>
@@ -14,31 +26,49 @@
</span> </span>
</span> </span>
{% endfor %} {% endfor %}
</div>
<div>
<div id="single-dicom-viewer" class="dicom-viewer" data-images="" data-annotations=''>
</div> </div>
<div>
<div id="single-dicom-viewer" class="dicom-viewer" data-images="" data-annotations=''>
</div>
</div> </div>
{% if collection.show_discussion and case.discussion%}
<details>
<summary>
Discussion:
</summary>
<div>
{{case.discussion}}
</div>
</details>
{% endif %}
<div> <div>
{% if previous %} {% if previous %}
<a href="{% url 'atlas:collection_case_view' pk=collection.pk case_number=case_number|add:-1 %}">Previous</a> <a href="{% url 'atlas:collection_case_view' pk=collection.pk case_number=case_number|add:-1 %}">Previous</a>
{% endif %} {% endif %}
{% if next %} {% if next %}
<a href="{% url 'atlas:collection_case_view' pk=collection.pk case_number=case_number|add:1 %}">Next</a> <a href="{% url 'atlas:collection_case_view' pk=collection.pk case_number=case_number|add:1 %}">Next</a>
{% endif %} {% endif %}
</div> </div>
<br/> <br />
Return to <a href='{{collection.get_absolute_url}}'>collection</a> Return to <a href='{{collection.get_absolute_url}}'>collection</a>
{% endblock %} {% endblock %}
{% block js %} {% block js %}
<script type="text/javascript"> <script type="text/javascript">
window.images = { window.images = {
{% for series in series_list %} {
{{forloop.counter0}} : ["{{ series.get_image_url_array_not_json }}"], %
{% endfor %} for series in series_list %
} {
{
forloop.counter0
}
}: ["{{ series.get_image_url_array_not_json }}"],
{
% endfor %
}
} }
$(document).ready(function () { $(document).ready(function () {
@@ -46,7 +76,6 @@ Return to <a href='{{collection.get_absolute_url}}'>collection</a>
window.loadDicomViewer(window.images[0]) window.loadDicomViewer(window.images[0])
}, 500); }, 500);
}) })
</script> </script>
{% endblock js %} {% endblock js %}
@@ -4,7 +4,11 @@
<h2>{{collection.name}} <h2>{{collection.name}}
<ul> <ul>
{% for case in collection.cases.all %} {% for case in collection.cases.all %}
<li><a href="{% url 'atlas:collection_case_view' pk=collection.pk case_number=forloop.counter0 %}">Case {{forloop.counter}}</a></li> <li><a href="{% url 'atlas:collection_case_view' pk=collection.pk case_number=forloop.counter0 %}">Case {{forloop.counter}}</a>
{% if collection.show_title %}
: {{case.title}}
{% endif %}
</li>
{% endfor %} {% endfor %}
+14 -3
View File
@@ -363,6 +363,11 @@ class SeriesCreate(RevisionMixin, LoginRequiredMixin, CreateView):
return initial return initial
def get_form_kwargs(self):
kwargs = super(SeriesCreate, self).get_form_kwargs()
kwargs.update({"user": self.request.user})
return kwargs
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(SeriesCreate, self).get_context_data(**kwargs) context = super(SeriesCreate, self).get_context_data(**kwargs)
@@ -416,6 +421,11 @@ class SeriesUpdate(
context["image_formset"] = SeriesImageFormSet(instance=self.object) context["image_formset"] = SeriesImageFormSet(instance=self.object)
return context return context
def get_form_kwargs(self):
kwargs = super(SeriesUpdate, self).get_form_kwargs()
kwargs.update({"user": self.request.user})
return kwargs
def form_valid(self, form): def form_valid(self, form):
self.object = form.save(commit=False) self.object = form.save(commit=False)
@@ -484,7 +494,7 @@ class AtlasCreateBase(RevisionMixin, LoginRequiredMixin):
context = super(AtlasCreateBase, self).get_context_data(**kwargs) context = super(AtlasCreateBase, self).get_context_data(**kwargs)
if self.request.POST: if self.request.POST:
context["series_formset"] = SeriesFormSet( context["series_formset"] = SeriesFormSet(
self.request.POST, self.request.FILES self.request.POST, self.request.FILES, queryset=Series.objects.filter(author__id=self.request.user.id)
) )
context["casedifferential_formset"] = CaseDifferentialFormSet( context["casedifferential_formset"] = CaseDifferentialFormSet(
self.request.POST, self.request.FILES self.request.POST, self.request.FILES
@@ -492,6 +502,7 @@ class AtlasCreateBase(RevisionMixin, LoginRequiredMixin):
context["series_formset"].full_clean() context["series_formset"].full_clean()
context["casedifferential_formset"].full_clean() context["casedifferential_formset"].full_clean()
else: else:
#context["series_formset"] = SeriesFormSet(instance=Case.objects.filter(author__id=self.request.user.id), queryset=Series.objects.filter(author__id=self.request.user.id))
context["series_formset"] = SeriesFormSet() context["series_formset"] = SeriesFormSet()
context["casedifferential_formset"] = CaseDifferentialFormSet() context["casedifferential_formset"] = CaseDifferentialFormSet()
return context return context
@@ -558,7 +569,7 @@ class AtlasUpdate(
context = super(AtlasUpdate, self).get_context_data(**kwargs) context = super(AtlasUpdate, self).get_context_data(**kwargs)
if self.request.POST: if self.request.POST:
context["series_formset"] = SeriesFormSet( context["series_formset"] = SeriesFormSet(
self.request.POST, self.request.FILES, instance=self.object self.request.POST, self.request.FILES, instance=self.object, queryset=Series.objects.filter(author__id=self.request.user.id)
) )
context["casedifferential_formset"] = CaseDifferentialFormSet( context["casedifferential_formset"] = CaseDifferentialFormSet(
self.request.POST, self.request.FILES, instance=self.object self.request.POST, self.request.FILES, instance=self.object
@@ -566,7 +577,7 @@ class AtlasUpdate(
context["series_formset"].full_clean() context["series_formset"].full_clean()
context["casedifferential_formset"].full_clean() context["casedifferential_formset"].full_clean()
else: else:
context["series_formset"] = SeriesFormSet(instance=self.object) context["series_formset"] = SeriesFormSet(instance=self.object, queryset=Series.objects.filter(author__id=self.request.user.id))
context["casedifferential_formset"] = CaseDifferentialFormSet( context["casedifferential_formset"] = CaseDifferentialFormSet(
instance=self.object instance=self.object
) )