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