From 180baa617d48a548284247799a0e9fe1b8a14ad2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org>
Date: Thu, 30 Mar 2023 21:27:41 +0200
Subject: [PATCH] raise 404 if model inexistent

---
 contracts/views.py | 35 +++++++++++++++++++++++------------
 1 file changed, 23 insertions(+), 12 deletions(-)

diff --git a/contracts/views.py b/contracts/views.py
index c2b4915..2c57b6f 100644
--- a/contracts/views.py
+++ b/contracts/views.py
@@ -4,7 +4,7 @@ import requests
 from django.conf import settings
 from django.core.paginator import Paginator
 from django.http import HttpResponse
-from django.shortcuts import render
+from django.shortcuts import get_object_or_404, render
 from django_downloadview import ObjectDownloadView
 from django_http_exceptions import HTTPExceptions
 from guardian.shortcuts import get_objects_for_user
@@ -89,10 +89,12 @@ def view_contract(request, id: int):
     if not request.user.has_perm("contracts.view_confidential"):
         filter["is_public"] = True
 
-    contract = (
-        get_objects_for_user(request.user, "contracts.view_contract")
-        .filter(**filter)
-        .get(id=id)
+    contract = get_object_or_404(
+        (
+            get_objects_for_user(request.user, "contracts.view_contract")
+            .filter(**filter)
+        ),
+        id=id
     )
 
     return render(
@@ -111,9 +113,10 @@ def view_contract(request, id: int):
 
 
 def view_contract_filing_area(request, id: int):
-    filing_area = get_objects_for_user(
-        request.user, "contracts.view_contractfilingarea"
-    ).get(id=id)
+    filing_area = get_object_or_404(
+        get_objects_for_user(request.user, "contracts.view_contractfilingarea"),
+        id=id
+    )
 
     contracts_page, contracts_paginator = get_paginated_contracts(
         request, {"filing_area": filing_area}
@@ -137,7 +140,8 @@ def view_contract_filing_area(request, id: int):
 
 
 def view_contract_issue(request, id: int):
-    issue = get_objects_for_user(request.user, "contracts.view_contractissue").get(
+    issue = get_object_or_404(
+        get_objects_for_user(request.user, "contracts.view_contractissue"),
         id=id
     )
 
@@ -160,7 +164,10 @@ def view_contract_issue(request, id: int):
 
 
 def view_contract_type(request, id: int):
-    type_ = get_objects_for_user(request.user, "contracts.view_contracttype").get(id=id)
+    type_ = get_object_or_404(
+        get_objects_for_user(request.user, "contracts.view_contracttype"),
+        id=id
+    )
 
     contracts_page, contracts_paginator = get_paginated_contracts(
         request, {"types": type_}
@@ -181,7 +188,8 @@ def view_contract_type(request, id: int):
 
 
 def view_contractee(request, id: int):
-    contractee = get_objects_for_user(request.user, "contracts.view_contractee").get(
+    contractee = get_object_or_404(
+        get_objects_for_user(request.user, "contracts.view_contractee"),
         id=id
     )
 
@@ -204,7 +212,10 @@ def view_contractee(request, id: int):
 
 
 def view_signee(request, id: int):
-    signee = get_objects_for_user(request.user, "contracts.view_signee").get(id=id)
+    signee = get_object_or_404(
+        get_objects_for_user(request.user, "contracts.view_signee"),
+        id=id
+    )
 
     contracts_page, contracts_paginator = get_paginated_contracts(
         request, {"signee_signatures__signee": signee}
-- 
GitLab