improve case form

This commit is contained in:
Ross
2025-06-30 13:33:35 +01:00
parent 4df7e5aebd
commit 2ac8344b13
3 changed files with 104 additions and 43 deletions
+7 -1
View File
@@ -533,6 +533,13 @@ class CaseSeriesForm(ModelForm):
else: else:
queryset = Series.objects.all() queryset = Series.objects.all()
# Optimize the queryset for the ModelChoiceField
queryset = queryset.select_related(
"modality"
).prefetch_related(
"examination", "plane", "contrast", "images"
)
self.fields["series"] = ModelChoiceField( self.fields["series"] = ModelChoiceField(
required=False, required=False,
queryset=queryset, queryset=queryset,
@@ -541,7 +548,6 @@ class CaseSeriesForm(ModelForm):
class CaseCollectionCaseForm(ModelForm): class CaseCollectionCaseForm(ModelForm):
def __init__(self, *args, user, collection=None, **kwargs): def __init__(self, *args, user, collection=None, **kwargs):
super(CaseCollectionCaseForm, self).__init__(*args, **kwargs) super(CaseCollectionCaseForm, self).__init__(*args, **kwargs)
+78 -42
View File
@@ -143,51 +143,87 @@
{% comment %} {{ form }} {% endcomment %} {% comment %} {{ form }} {% endcomment %}
<h3>Series:</h3> <!-- Series Collapsible Panel (Dark Themed) -->
Add image sets here. These can only be added once created (they can also be added to cases on creation). <div class="card my-3 bg-dark text-white">
<input type="button" value="Add More Series" id="add_more_series"> <div class="card-header">
<div id="series_formset" class="list_formset"> <a class="collapsed text-white" data-bs-toggle="collapse" href="#seriesPanel" role="button" aria-expanded="false" aria-controls="seriesPanel">
<ol> <h3 class="d-inline">Series</h3>
{% for form in series_formset %} <span class="ms-2">(click to expand/collapse)</span>
<li class="no-error series-formset"> </a>
{{form.non_field_errors}} </div>
{{form.errors}} <div class="collapse" id="seriesPanel">
{{ form | crispy}} <input type="button" value="Add More Series" id="add_more_series" class="btn btn-sm btn-light float-end">
</li> <div class="card-body bg-dark text-white">
{% endfor %} <p>Add image sets here. These can only be added once created (they can also be added to cases on creation).</p>
</ol> <div id="series_formset" class="list_formset">
<ol>
{% for form in series_formset %}
<li class="no-error series-formset">
{{form.non_field_errors}}
{{form.errors}}
{{ form | crispy}}
</li>
{% endfor %}
</ol>
</div>
{{ series_formset.management_form | crispy }}
</div> </div>
{{ series_formset.management_form | crispy }} </div>
<h3>Differential:</h3> </div>
Add differential here.
<input type="button" value="Add Another Differential" id="add_more_differential"> <!-- Differential Collapsible Panel -->
<div id="casedifferential_formset" class="list_formset"> <div class="card my-3 bg-dark text-white">
<ol> <div class="card-header">
{% for form in casedifferential_formset %} <a class="collapsed text-white" data-bs-toggle="collapse" href="#differentialPanel" role="button" aria-expanded="false" aria-controls="differentialPanel">
<li class="no-error casedifferential_formset"> <h3 class="d-inline">Differential</h3>
{{form.non_field_errors}} <span class="ms-2">(click to expand/collapse)</span>
{{form.errors}} </a>
{{ form | crispy}} </div>
</li> <div class="collapse" id="differentialPanel">
{% endfor %} <input type="button" value="Add Another Differential" id="add_more_differential" class="btn btn-sm btn-primary float-end">
</ol> <div class="card-body">
<div id="casedifferential_formset" class="list_formset">
<ol>
{% for form in casedifferential_formset %}
<li class="no-error casedifferential_formset">
{{form.non_field_errors}}
{{form.errors}}
{{ form | crispy}}
</li>
{% endfor %}
</ol>
</div>
{{ casedifferential_formset.management_form | crispy }}
</div> </div>
{{ casedifferential_formset.management_form | crispy }} </div>
<h3>Resource:</h3> </div>
Add resource here. Resource can be anything that is useful for the case (videos, pdf, etc). This can either be avalaible before attempting the case (such a for a pre reading list) or after.
<input type="button" value="Add Another Resource" id="add_more_resource"> <!-- Resource Collapsible Panel -->
<div id="caseresource_formset" class="list_formset"> <div class="card my-3 bg-dark text-white">
<ol> <div class="card-header">
{% for form in caseresource_formset %} <a class="collapsed text-white" data-bs-toggle="collapse" href="#resourcePanel" role="button" aria-expanded="false" aria-controls="resourcePanel">
<li class="no-error caseresource_formset"> <h3 class="d-inline">Resource</h3>
{{form.non_field_errors}} <span class="ms-2">(click to expand/collapse)</span>
{{form.errors}} </a>
{{ form | crispy}} </div>
</li> <div class="collapse" id="resourcePanel">
{% endfor %} <input type="button" value="Add Another Resource" id="add_more_resource" class="btn btn-sm btn-primary float-end">
</ol> <div class="card-body">
<div id="caseresource_formset" class="list_formset">
<ol>
{% for form in caseresource_formset %}
<li class="no-error caseresource_formset">
{{form.non_field_errors}}
{{form.errors}}
{{ form | crispy}}
</li>
{% endfor %}
</ol>
</div>
{{ caseresource_formset.management_form | crispy}}
</div> </div>
{{ caseresource_formset.management_form | crispy}} </div>
</div>
<br/> <br/>
<input type="submit" class="submit-button" value="Submit" name="submit"> <input type="submit" class="submit-button" value="Submit" name="submit">
</form> </form>
+19
View File
@@ -1052,6 +1052,25 @@ class AtlasUpdate(
# #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_object(self, queryset=None):
# # Prefetch all related objects needed for the form and formsets
# qs = self.model.objects.select_related(
# # Add all FK fields here
# ).prefetch_related(
# "series__examination",
# "series__plane",
# "series__contrast",
# "series__images",
# "subspecialty",
# "condition",
# "presentation",
# "pathological_process",
# "differentialcase",
# "caseresource_set",
# )
# return qs.get(pk=self.kwargs["pk"])
def get_form_kwargs(self): def get_form_kwargs(self):
kwargs = super(AtlasUpdate, self).get_form_kwargs() kwargs = super(AtlasUpdate, self).get_form_kwargs()
kwargs.update({"user": self.request.user}) kwargs.update({"user": self.request.user})