diff options
author | Andrea Lepori <alepori@student.ethz.ch> | 2021-08-19 12:19:41 +0200 |
---|---|---|
committer | Andrea Lepori <alepori@student.ethz.ch> | 2021-08-19 12:20:00 +0200 |
commit | 9f474d32ef47b02868a31bd59eaf969087d67a16 (patch) | |
tree | 392dbb55ffd35623fc973e03e7ce29dc89a2acf0 /client/views.py | |
parent | RO documents for non primary groups (diff) | |
download | scout-subs-9f474d32ef47b02868a31bd59eaf969087d67a16.tar.gz scout-subs-9f474d32ef47b02868a31bd59eaf969087d67a16.zip |
use query instead of for loop in client
Diffstat (limited to 'client/views.py')
-rw-r--r-- | client/views.py | 68 |
1 files changed, 18 insertions, 50 deletions
diff --git a/client/views.py b/client/views.py index 841b254..bc0b071 100644 --- a/client/views.py +++ b/client/views.py @@ -93,49 +93,27 @@ def index(request): context['personal_data'] = document_type.personal_data context['medical_data'] = document_type.medical_data context['custom_data'] = document_type.custom_data - keys = Keys.objects.filter(container=document_type) - out_keys = [] - for i in keys: - out_keys.append([i, KeyVal.objects.filter( - Q(container=document) & Q(key=i.key))[0].value]) - context['keys'] = out_keys + context['keys'] = KeyVal.objects.filter(container=document) context['custom_message'] = document_type.custom_message context['custom_message_text'] = document_type.custom_message_text return edit_wrapper(request, context) # show only docs of the user and non archived documents = Document.objects.filter( - Q(user=request.user) & ~Q(status='archive')) - out = [] - for i in documents: - # for every document prepare images in base64 - personal = None - medical = None - vac_file = "" - health_file = "" - sign_doc_file = "" - if i.personal_data: - personal = i.personal_data - if i.medical_data: - medical = i.medical_data - if medical.vac_certificate.name: - vac_file = "/server/media/" + str(i.id) + "/vac_certificate/doc" - - if medical.health_care_certificate.name: - health_file = "/server/media/" + str(i.id) + "/health_care_certificate/doc" - - if i.signed_doc: - sign_doc_file = "/server/media/" + str(i.id) + "/signed_doc/doc" - - doc_group = i.user.groups.values_list('name', flat=True)[0] - - out.append([i, KeyVal.objects.filter(container=i), - personal, medical, doc_group, vac_file, health_file, sign_doc_file]) + Q(user=request.user) & ~Q(status='archive')).select_related("personal_data", "medical_data", "document_type", "user") + + vac_file = ["/server/media/", "/vac_certificate/doc"] + health_file = ["/server/media/", "/health_care_certificate/doc"] + sign_doc_file = ["/server/media/", "/signed_doc/doc"] context = { - "docs": out, - "empty": len(out) == 0, + "docs": documents, + "base_group": groups[0].name, + "empty": len(documents) == 0, "group_view": group_view, + "vac_file": vac_file, + "health_file": health_file, + "sign_doc_file": sign_doc_file } return render(request, 'client/index.html', context) @@ -152,14 +130,10 @@ def create(request): if not request.user.is_staff and "capi" not in request.user.groups.values_list('name',flat = True): filter = filter & Q(staff_only=False) - doctypes = DocumentType.objects.filter(filter) - out = [] - for doc in doctypes: - # check if user has already that document type - if len(Document.objects.filter(Q(user=request.user) & Q(document_type=doc))) == 0: - out.append(doc) + # remove from the list documents from already used types + doctypes = DocumentType.objects.filter(filter).values_list("id", flat=True).difference(Document.objects.filter(user=request.user).select_related("document_type").values_list("document_type", flat=True)) - context['docs'] = out + context['docs'] = DocumentType.objects.filter(id__in=doctypes) if request.method == "POST": if request.POST["action"] == "details": # user has to select a document type @@ -184,11 +158,7 @@ def create(request): context['personal_data'] = document_type.personal_data context['medical_data'] = document_type.medical_data context['custom_data'] = document_type.custom_data - keys = Keys.objects.filter(container=document_type) - out_keys = [] - for i in keys: - out_keys.append([i, ""]) - context['keys'] = out_keys + context['keys'] = Keys.objects.filter(container=document_type) context['custom_message'] = document_type.custom_message context['custom_message_text'] = document_type.custom_message_text elif request.POST["action"] == "save": @@ -258,8 +228,7 @@ def create(request): for i in request.POST.keys(): if i == "doctype" or i == "csrfmiddlewaretoken" or i == "action": continue - key = KeyVal(container=document, key=Keys.objects.get( - id=i).key, value=request.POST[i]) + key = KeyVal(container=document, key=Keys.objects.get(id=i).key, value=request.POST[i]) key.save() return HttpResponseRedirect('/') @@ -315,8 +284,7 @@ def edit_wrapper(request, context): for i in request.POST.keys(): if i == "doc" or i == "csrfmiddlewaretoken": continue - key = KeyVal.objects.filter(Q(container=document) & Q( - key=Keys.objects.get(id=i).key))[0] + key = KeyVal.objects.get(id=i) key.value = request.POST[i] key.save() |