fix formsets?

This commit is contained in:
Ross
2021-01-18 16:18:07 +00:00
parent d3b42ad207
commit ee761afe83
3 changed files with 89 additions and 18 deletions
+39
View File
@@ -397,3 +397,42 @@ td.user-answer-score-2::after {
.answer-0 { .answer-0 {
color: red; color: red;
} }
.selector {
border-color: #05668d;
}
.selector input {
color: gray;
background-color: white;
font-size: small;
}
.selector .selector-available h2, .selector .selector-chosen h2 {
margin-bottom: 0px;
border: none;
/* border-color: #05668d; */
background-color: #ebf2fa;
color: rgb(28, 184, 65);
}
.selector .selector-available select, .selector .selector-chosen select {
border-color: #05668d;
}
#id_laterality {
margin-top: 30px;
}
#id_laterality li{
display: inline-block;
border-radius: 4px;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
background: rgb(28, 184, 65);
padding-right: 10px;
}
.add-popup {
display: block;
}
+23 -4
View File
@@ -27,10 +27,16 @@
function add_input_form() { function add_input_form() {
var form_idx = $('#id_images-TOTAL_FORMS').val(); var form_idx = $('#id_images-TOTAL_FORMS').val();
$('#form_set').append($('#empty_form').html().replace(/__prefix__/g, form_idx)); $('#image_form_set').append($('#empty_form').html().replace(/__prefix__/g, form_idx));
$('#id_images-TOTAL_FORMS').val(parseInt(form_idx) + 1); $('#id_images-TOTAL_FORMS').val(parseInt(form_idx) + 1);
} }
function add_answers_input_form() {
var form_idx = $('#id_answers-TOTAL_FORMS').val();
$('#answer_form_set').append($('#empty_form').html().replace(/__prefix__/g, form_idx));
$('#id_answers-TOTAL_FORMS').val(parseInt(form_idx) + 1);
}
$(document).ready(function () { $(document).ready(function () {
$("#add_abnormality").appendTo($("label[for='id_abnormality']")); $("#add_abnormality").appendTo($("label[for='id_abnormality']"));
@@ -118,11 +124,12 @@
}; };
$('#add_more').click(() => { add_input_form() }); $('#add_more_images').click(() => { add_input_form() });
$('#add_more_answers').click(() => { add_answers_input_form() });
function updateFileList() { function updateFileList() {
$("#drop-filenames").empty() $("#drop-filenames").empty()
$("#form_set input[type=file]").each((n, el) => { $("#image_form_set input[type=file]").each((n, el) => {
console.log(el); console.log(el);
if(el.files.length > 0) { if(el.files.length > 0) {
extra_class = " image-ident-loading"; extra_class = " image-ident-loading";
@@ -224,13 +231,25 @@
<table> <table>
{{ form.as_table }} {{ form.as_table }}
</table> </table>
<h3>Answers:</h3>
<input type="button" value="Add More Answers" id="add_more">
<div id="answer_form_set">
{% for form in answer_formset %}
<ul class="no-error answer-formset">
{{form.non_field_errors}}
{{form.errors}}
{{ form.as_ul }}
</ul>
{% endfor %}
</div>
{{ answer_formset.management_form }}
<h3>Images:</h3> <h3>Images:</h3>
<input type="button" value="Add More Images" id="add_more"> <input type="button" value="Add More Images" id="add_more">
<div id="drop-container" class="drop-target">Drop images here (or use the buttons below)<div <div id="drop-container" class="drop-target">Drop images here (or use the buttons below)<div
id="feedback-drop-target">Feedback image?<br />drop those here</div> id="feedback-drop-target">Feedback image?<br />drop those here</div>
<div id="drop-filenames"></div> <div id="drop-filenames"></div>
</div> </div>
<div id="form_set"> <div id="image_form_set">
{% for form in image_formset %} {% for form in image_formset %}
<ul class="no-error image-formset"> <ul class="no-error image-formset">
{{form.non_field_errors}} {{form.non_field_errors}}
+26 -13
View File
@@ -16,7 +16,7 @@ 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 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
@@ -201,23 +201,28 @@ def rapid_clone(request, pk):
form = RapidForm(request.POST or None, instance=new_item) form = RapidForm(request.POST or None, instance=new_item)
formset = ImageFormSet() image_formset = ImageFormSet()
answer_formset = AnswerFormSet()
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 formset.is_valid(): if image_formset.is_valid() and answer_formset.is_valid():
response = super().form_valid(form) response = super().form_valid(form)
formset.instance = obj image_formset.instance = obj
formset.save() image_formset.save()
answer_formset.instance = obj
answer_formset.save()
return response return response
else: else:
return super().form_invalid(form) return super().form_invalid(form)
context = { context = {
"form": form, "form": form,
"image_formset": formset "image_formset": image_formset
"answer_formset": answer_formset
#other context #other context
} }
@@ -245,11 +250,14 @@ 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)
formset = context['image_formset'] image_formset = context['image_formset']
if formset.is_valid(): answer_formset = context['answer_formset']
if image_formset.is_valid() and answer_formset.is_valid():
response = super().form_valid(form) response = super().form_valid(form)
formset.instance = self.object image_formset.instance = self.object
formset.save() image_formset.save()
answer_formset.instance = self.object
answer_formset.save()
# If the normal submit button is pressed we save as normal # If the normal submit button is pressed we save as normal
if "submit" in self.request.POST: if "submit" in self.request.POST:
return response return response
@@ -303,8 +311,10 @@ class RapidUpdate(LoginRequiredMixin, AuthorOrCheckerRequiredMixin,
self.request.FILES, self.request.FILES,
instance=self.object) instance=self.object)
context['image_formset'].full_clean() context['image_formset'].full_clean()
context['answer_formset'] = AnswerFormSet(instance=self.object)
else: else:
context['image_formset'] = ImageFormSet(instance=self.object) context['image_formset'] = ImageFormSet(instance=self.object)
context['answer_formset'] = AnswerFormSet(instance=self.object)
return context return context
def form_valid(self, form): def form_valid(self, form):
@@ -315,12 +325,15 @@ 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)
formset = context['image_formset'] image_formset = context['image_formset']
answer_formset = context['image_formset']
#logger.debug(formset.is_valid()) #logger.debug(formset.is_valid())
if formset.is_valid(): if formset.is_valid():
response = super().form_valid(form) response = super().form_valid(form)
formset.instance = self.object image_formset.instance = self.object
formset.save() image_formset.save()
answer_formset.instance = self.object
answer_formset.save()
return response return response
else: else:
return super().form_invalid(form) return super().form_invalid(form)