This commit is contained in:
Ross
2021-12-06 13:17:52 +00:00
parent c50fd80c58
commit a2c21d8ab5
3 changed files with 70 additions and 16 deletions
+9 -2
View File
@@ -188,7 +188,8 @@ class FindingTable(tables.Table):
) )
selection = tables.CheckBoxColumn(accessor="pk", orderable=False) selection = tables.CheckBoxColumn(accessor="pk", orderable=False)
synonym = tables.ManyToManyColumn(verbose_name="Synonyms") #synonym = tables.ManyToManyColumn(verbose_name="Synonyms")
synonym = tables.Column(empty_values=())
parent = tables.ManyToManyColumn(verbose_name="Parents") parent = tables.ManyToManyColumn(verbose_name="Parents")
class Meta: class Meta:
@@ -197,6 +198,8 @@ class FindingTable(tables.Table):
fields = ("name", "primary") fields = ("name", "primary")
sequence = ("name",) sequence = ("name",)
def render_synonym(self, value, record):
return format_html(record.get_synonym_link())
class StructureTable(tables.Table): class StructureTable(tables.Table):
name = tables.Column( name = tables.Column(
@@ -211,7 +214,8 @@ class StructureTable(tables.Table):
) )
selection = tables.CheckBoxColumn(accessor="pk", orderable=False) selection = tables.CheckBoxColumn(accessor="pk", orderable=False)
synonym = tables.ManyToManyColumn(verbose_name="Synonyms") #synonym = tables.ManyToManyColumn(verbose_name="Synonyms")
synonym = tables.Column(empty_values=())
parent = tables.ManyToManyColumn(verbose_name="Parents") parent = tables.ManyToManyColumn(verbose_name="Parents")
class Meta: class Meta:
@@ -219,3 +223,6 @@ class StructureTable(tables.Table):
template_name = "django_tables2/bootstrap4.html" template_name = "django_tables2/bootstrap4.html"
fields = ("name", "primary") fields = ("name", "primary")
sequence = ("name",) sequence = ("name",)
def render_synonym(self, value, record):
return format_html(record.get_synonym_link())
+32 -8
View File
@@ -12,23 +12,47 @@ urlpatterns = [
path("case/", views.CaseView.as_view(), name="case_view"), path("case/", views.CaseView.as_view(), name="case_view"),
path("condition/", views.ConditionView.as_view(), name="condition_view"), path("condition/", views.ConditionView.as_view(), name="condition_view"),
path("condition/<int:pk>", views.condition_detail, name="condition_detail"), path("condition/<int:pk>", views.condition_detail, name="condition_detail"),
path("condition/<int:pk>/delete", views.ConditionDelete.as_view(), name="condition_delete"), path(
path("condition/<int:pk>/update", views.ConditionUpdate.as_view(), name="condition_update"), "condition/<int:pk>/delete",
views.ConditionDelete.as_view(),
name="condition_delete",
),
path(
"condition/<int:pk>/update",
views.ConditionUpdate.as_view(),
name="condition_update",
),
path("condition/create", views.ConditionCreate.as_view(), name="condition_create"), path("condition/create", views.ConditionCreate.as_view(), name="condition_create"),
path("finding/", views.FindingView.as_view(), name="finding_view"), path("finding/", views.FindingView.as_view(), name="finding_view"),
path("finding/<int:pk>", views.finding_detail, name="finding_detail"), path("finding/<int:pk>", views.finding_detail, name="finding_detail"),
path("finding/<int:pk>/delete", views.FindingDelete.as_view(), name="finding_delete"), path(
path("finding/<int:pk>/update", views.FindingUpdate.as_view(), name="finding_update"), "finding/<int:pk>/delete", views.FindingDelete.as_view(), name="finding_delete"
),
path(
"finding/<int:pk>/update", views.FindingUpdate.as_view(), name="finding_update"
),
path("finding/create", views.FindingCreate.as_view(), name="finding_create"), path("finding/create", views.FindingCreate.as_view(), name="finding_create"),
path("structure/", views.StructureView.as_view(), name="structure_view"), path("structure/", views.StructureView.as_view(), name="structure_view"),
path("structure/<int:pk>", views.structure_detail, name="structure_detail"), path("structure/<int:pk>", views.structure_detail, name="structure_detail"),
path("structure/<int:pk>/delete", views.StructureDelete.as_view(), name="structure_delete"), path(
path("structure/<int:pk>/update", views.StructureUpdate.as_view(), name="structure_update"), "structure/<int:pk>/delete",
views.StructureDelete.as_view(),
name="structure_delete",
),
path(
"structure/<int:pk>/update",
views.StructureUpdate.as_view(),
name="structure_update",
),
path("structure/create", views.StructureCreate.as_view(), name="structure_create"), path("structure/create", views.StructureCreate.as_view(), name="structure_create"),
path("series/<int:pk>", views.series_detail, name="series_detail"), path("series/<int:pk>", views.series_detail, name="series_detail"),
path("series/", views.SeriesView.as_view(), name="series_view"), path("series/", views.SeriesView.as_view(), name="series_view"),
path("series/<int:pk>", views.series_detail, name="series_detail"), path("series/<int:pk>", views.series_detail, name="series_detail"),
path("series/<int:pk>/<int:finding_pk>", views.series_detail, name="series_edit_finding"), path(
"series/<int:pk>/<int:finding_pk>",
views.series_detail,
name="series_edit_finding",
),
path( path(
"series/<int:pk>/order_dicom", "series/<int:pk>/order_dicom",
views.series_order_dicom, views.series_order_dicom,
@@ -66,7 +90,7 @@ urlpatterns = [
# path("verified/", views.verified, name="verified"), # path("verified/", views.verified, name="verified"),
# path("all_questions/", views.all_questions, name="all_questions"), # path("all_questions/", views.all_questions, name="all_questions"),
path("case/<int:pk>/scrap", views.atlas_scrap, name="case_scrap"), path("case/<int:pk>/scrap", views.atlas_scrap, name="case_scrap"),
path("case/<int:pk>/delete", views.AtlasDelete.as_view(), name="case_delete"), path("case/<int:pk>/delete", views.CaseDelete.as_view(), name="case_delete"),
path("case/create/", views.AtlasCreate.as_view(), name="create"), path("case/create/", views.AtlasCreate.as_view(), name="create"),
path("series/create", views.SeriesCreate.as_view(), name="series_create"), path("series/create", views.SeriesCreate.as_view(), name="series_create"),
path( path(
+29 -6
View File
@@ -49,7 +49,13 @@ from .models import (
SeriesImage, SeriesImage,
) )
from .tables import CaseTable, ConditionTable, FindingTable, SeriesTable, StructureTable from .tables import CaseTable, ConditionTable, FindingTable, SeriesTable, StructureTable
from .filters import AtlasFilter, ConditionFilter, FindingFilter, SeriesFilter, StructureFilter from .filters import (
AtlasFilter,
ConditionFilter,
FindingFilter,
SeriesFilter,
StructureFilter,
)
from django_tables2 import SingleTableView, SingleTableMixin from django_tables2 import SingleTableView, SingleTableMixin
from django_filters.views import FilterView from django_filters.views import FilterView
@@ -141,6 +147,7 @@ def series_detail(request, pk, finding_pk=None):
}, },
) )
@login_required @login_required
@user_is_atlas_checker @user_is_atlas_checker
def condition_detail(request, pk): def condition_detail(request, pk):
@@ -155,6 +162,7 @@ def condition_detail(request, pk):
}, },
) )
@login_required @login_required
@user_is_atlas_checker @user_is_atlas_checker
def structure_detail(request, pk): def structure_detail(request, pk):
@@ -169,6 +177,7 @@ def structure_detail(request, pk):
}, },
) )
@login_required @login_required
@user_is_atlas_checker @user_is_atlas_checker
def finding_detail(request, pk): def finding_detail(request, pk):
@@ -183,6 +192,7 @@ def finding_detail(request, pk):
}, },
) )
@login_required @login_required
@user_is_author_or_atlas_checker @user_is_author_or_atlas_checker
def author_detail(request, pk): def author_detail(request, pk):
@@ -204,9 +214,10 @@ def author_list(request):
return render(request, "atlas/author_list.html", {"authors": authors}) return render(request, "atlas/author_list.html", {"authors": authors})
class AtlasDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView): class CaseDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
model = Case model = Case
success_url = reverse_lazy("atlas:case_view") success_url = reverse_lazy("atlas:case_view")
template_name = "confirm_delete.html"
class SeriesFindingDelete(RevisionMixin, PermissionRequiredMixin, DeleteView): class SeriesFindingDelete(RevisionMixin, PermissionRequiredMixin, DeleteView):
@@ -226,21 +237,25 @@ class SeriesDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
template_name = "confirm_delete.html" template_name = "confirm_delete.html"
success_url = reverse_lazy("atlas:series_view") success_url = reverse_lazy("atlas:series_view")
class ConditionDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView): class ConditionDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
model = Condition model = Condition
template_name = "confirm_delete.html" template_name = "confirm_delete.html"
success_url = reverse_lazy("atlas:condition_view") success_url = reverse_lazy("atlas:condition_view")
class FindingDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView): class FindingDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
model = Finding model = Finding
template_name = "confirm_delete.html" template_name = "confirm_delete.html"
success_url = reverse_lazy("atlas:finding_view") success_url = reverse_lazy("atlas:finding_view")
class StructureDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView): class StructureDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
model = Structure model = Structure
template_name = "confirm_delete.html" template_name = "confirm_delete.html"
success_url = reverse_lazy("atlas:structure_view") success_url = reverse_lazy("atlas:structure_view")
@login_required @login_required
@user_is_author_or_atlas_checker @user_is_author_or_atlas_checker
def case_clone(request, pk): def case_clone(request, pk):
@@ -366,30 +381,36 @@ class ConditionUpdate(
model = Condition model = Condition
form_class = ConditionForm form_class = ConditionForm
class ConditionCreate(RevisionMixin, LoginRequiredMixin, CreateView): class ConditionCreate(RevisionMixin, LoginRequiredMixin, CreateView):
model = Condition model = Condition
form_class = ConditionForm form_class = ConditionForm
class FindingUpdate( class FindingUpdate(
RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView
): ):
model = Finding model = Finding
form_class = FindingForm form_class = FindingForm
class FindingCreate(RevisionMixin, LoginRequiredMixin, CreateView): class FindingCreate(RevisionMixin, LoginRequiredMixin, CreateView):
model = Finding model = Finding
form_class = FindingForm form_class = FindingForm
class StructureUpdate( class StructureUpdate(
RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView RevisionMixin, LoginRequiredMixin, AuthorOrCheckerRequiredMixin, UpdateView
): ):
model = Structure model = Structure
form_class = StructureForm form_class = StructureForm
class StructureCreate(RevisionMixin, LoginRequiredMixin, CreateView): class StructureCreate(RevisionMixin, LoginRequiredMixin, CreateView):
model = Structure model = Structure
form_class = StructureForm form_class = StructureForm
class AtlasCreateBase(RevisionMixin, LoginRequiredMixin): class AtlasCreateBase(RevisionMixin, LoginRequiredMixin):
model = Case model = Case
form_class = CaseForm form_class = CaseForm
@@ -579,6 +600,7 @@ class SeriesView(LoginRequiredMixin, SingleTableMixin, FilterView):
filterset_class = SeriesFilter filterset_class = SeriesFilter
class ConditionView(LoginRequiredMixin, SingleTableMixin, FilterView): class ConditionView(LoginRequiredMixin, SingleTableMixin, FilterView):
model = Condition model = Condition
table_class = ConditionTable table_class = ConditionTable
@@ -586,6 +608,7 @@ class ConditionView(LoginRequiredMixin, SingleTableMixin, FilterView):
filterset_class = ConditionFilter filterset_class = ConditionFilter
class StructureView(LoginRequiredMixin, SingleTableMixin, FilterView): class StructureView(LoginRequiredMixin, SingleTableMixin, FilterView):
model = Structure model = Structure
table_class = StructureTable table_class = StructureTable
@@ -593,6 +616,7 @@ class StructureView(LoginRequiredMixin, SingleTableMixin, FilterView):
filterset_class = StructureFilter filterset_class = StructureFilter
class FindingView(LoginRequiredMixin, SingleTableMixin, FilterView): class FindingView(LoginRequiredMixin, SingleTableMixin, FilterView):
model = Finding model = Finding
table_class = FindingTable table_class = FindingTable
@@ -679,9 +703,9 @@ def create_series_findings(request):
if series_finding_id > 0: if series_finding_id > 0:
sf = get_object_or_404(SeriesFinding, pk=series_finding_id) sf = get_object_or_404(SeriesFinding, pk=series_finding_id)
sf.series = series sf.series = series
sf.description=description sf.description = description
sf.annotation_json=annotation_json sf.annotation_json = annotation_json
sf.viewport_json=viewport_json sf.viewport_json = viewport_json
else: else:
sf = SeriesFinding.objects.create( sf = SeriesFinding.objects.create(
series=series, series=series,
@@ -690,7 +714,6 @@ def create_series_findings(request):
viewport_json=viewport_json, viewport_json=viewport_json,
) )
sf.findings.set(findings) sf.findings.set(findings)
sf.structures.set(structures) sf.structures.set(structures)
sf.save() sf.save()