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

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 

6 

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) 

13 

14 

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 

25 

26 

27class CreateRelationForm(CreateRelation): 

28 template_name = "relations/create_relation_form.html" 

29 

30 def setup(self, *args, **kwargs) -> None: 

31 super().setup(*args, **kwargs) 

32 self.reverse = self.request.GET.get("reverse", "false").lower() == "true" 

33 

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 

41 

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 

46 

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) 

60 

61 def get_form_class(self, *args, **kwargs): 

62 return modelform_factory(self.model, RelationFormHX) 

63 

64 

65class ListRelations(TemplateView): 

66 template_name = "relations/list_relations.html" 

67 

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 

78 

79 def get(self, *args, **kwargs): 

80 resp = super().get(*args, **kwargs) 

81 resp["HX-Trigger"] = "dismissModal" 

82 return resp