Coverage for apis_core/relations/views.py: 37%
49 statements
« prev ^ index » next coverage.py v7.6.8, created at 2024-12-20 09:24 +0000
« prev ^ index » next coverage.py v7.6.8, created at 2024-12-20 09:24 +0000
1from django.contrib.contenttypes.models import ContentType
2from django.shortcuts import get_object_or_404
3from django.urls import reverse
4from django.views.generic.base import TemplateView
6from apis_core.generic.views import Create
7from apis_core.relations.templatetags.relations import (
8 possible_relation_types_from,
9 relations_from,
10)
13class CreateRelation(Create):
14 def get_form_kwargs(self, *args, **kwargs) -> dict:
15 kwargs = super().get_form_kwargs(*args, **kwargs)
16 kwargs["initial"]["obj_content_type"] = self.request.GET.get("obj_content_type")
17 kwargs["initial"]["obj_object_id"] = self.request.GET.get("obj_object_id")
18 kwargs["initial"]["subj_content_type"] = self.request.GET.get(
19 "subj_content_type"
20 )
21 kwargs["initial"]["subj_object_id"] = self.request.GET.get("subj_object_id")
22 return kwargs
25class CreateRelationForm(CreateRelation):
26 template_name = "relations/create_relation_form.html"
28 def setup(self, *args, **kwargs) -> None:
29 super().setup(*args, **kwargs)
30 self.reverse = self.request.GET.get("reverse", "false").lower() == "true"
32 def get(self, *args, **kwargs):
33 resp = super().get(*args, **kwargs)
34 content_type = ContentType.objects.get_for_model(self.model)
35 resp["HX-Trigger-After-Settle"] = (
36 '{"reinit_select2": "relation_' + content_type.model + '_form"}'
37 )
38 return resp
40 def get_form_kwargs(self, *args, **kwargs) -> dict:
41 kwargs = super().get_form_kwargs(*args, **kwargs)
42 kwargs["reverse"] = self.reverse
43 content_type = ContentType.objects.get_for_model(self.model)
44 kwargs["hx_post_route"] = reverse(
45 "apis_core:relations:create_relation_form", args=[content_type]
46 )
47 return kwargs
49 def get_success_url(self) -> str:
50 args = [
51 self.object.obj_content_type,
52 self.object.subj_content_type,
53 self.object.subj_object_id,
54 ]
55 if self.reverse:
56 args = [
57 self.object.subj_content_type,
58 self.object.obj_content_type,
59 self.object.obj_object_id,
60 ]
61 return reverse("apis_core:relations:list_relations", args=args)
64class ListRelations(TemplateView):
65 template_name = "relations/list_relations.html"
67 def get_context_data(self, *args, **kwargs) -> dict:
68 ctx = super().get_context_data(*args, **kwargs)
69 ctx["target"] = kwargs.get("target_contenttype")
70 ctx["object"] = get_object_or_404(
71 kwargs.get("object_contenttype").model_class(), pk=kwargs.get("object_id")
72 )
73 ctx["relations"] = relations_from(ctx["object"])
74 ctx["possible_relations"] = possible_relation_types_from(ctx["object"])
75 ctx["edit"] = True
76 return ctx
78 def get(self, *args, **kwargs):
79 resp = super().get(*args, **kwargs)
80 resp["HX-Trigger"] = "dismissModal"
81 return resp