Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/django/contrib/admin/templatetags/admin_modify.py: 17%

62 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1import json 

2 

3from django import template 

4from django.template.context import Context 

5 

6from .base import InclusionAdminNode 

7 

8register = template.Library() 

9 

10 

11def prepopulated_fields_js(context): 

12 """ 

13 Create a list of prepopulated_fields that should render JavaScript for 

14 the prepopulated fields for both the admin form and inlines. 

15 """ 

16 prepopulated_fields = [] 

17 if "adminform" in context: 

18 prepopulated_fields.extend(context["adminform"].prepopulated_fields) 

19 if "inline_admin_formsets" in context: 

20 for inline_admin_formset in context["inline_admin_formsets"]: 

21 for inline_admin_form in inline_admin_formset: 

22 if inline_admin_form.original is None: 

23 prepopulated_fields.extend(inline_admin_form.prepopulated_fields) 

24 

25 prepopulated_fields_json = [] 

26 for field in prepopulated_fields: 

27 prepopulated_fields_json.append( 

28 { 

29 "id": "#%s" % field["field"].auto_id, 

30 "name": field["field"].name, 

31 "dependency_ids": [ 

32 "#%s" % dependency.auto_id for dependency in field["dependencies"] 

33 ], 

34 "dependency_list": [ 

35 dependency.name for dependency in field["dependencies"] 

36 ], 

37 "maxLength": field["field"].field.max_length or 50, 

38 "allowUnicode": getattr(field["field"].field, "allow_unicode", False), 

39 } 

40 ) 

41 

42 context.update( 

43 { 

44 "prepopulated_fields": prepopulated_fields, 

45 "prepopulated_fields_json": json.dumps(prepopulated_fields_json), 

46 } 

47 ) 

48 return context 

49 

50 

51@register.tag(name="prepopulated_fields_js") 

52def prepopulated_fields_js_tag(parser, token): 

53 return InclusionAdminNode( 

54 parser, 

55 token, 

56 func=prepopulated_fields_js, 

57 template_name="prepopulated_fields_js.html", 

58 ) 

59 

60 

61def submit_row(context): 

62 """ 

63 Display the row of buttons for delete and save. 

64 """ 

65 add = context["add"] 

66 change = context["change"] 

67 is_popup = context["is_popup"] 

68 save_as = context["save_as"] 

69 show_save = context.get("show_save", True) 

70 show_save_and_add_another = context.get("show_save_and_add_another", True) 

71 show_save_and_continue = context.get("show_save_and_continue", True) 

72 has_add_permission = context["has_add_permission"] 

73 has_change_permission = context["has_change_permission"] 

74 has_view_permission = context["has_view_permission"] 

75 has_editable_inline_admin_formsets = context["has_editable_inline_admin_formsets"] 

76 can_save = ( 

77 (has_change_permission and change) 

78 or (has_add_permission and add) 

79 or has_editable_inline_admin_formsets 

80 ) 

81 can_save_and_add_another = ( 

82 has_add_permission 

83 and not is_popup 

84 and (not save_as or add) 

85 and can_save 

86 and show_save_and_add_another 

87 ) 

88 can_save_and_continue = ( 

89 not is_popup and can_save and has_view_permission and show_save_and_continue 

90 ) 

91 can_change = has_change_permission or has_editable_inline_admin_formsets 

92 ctx = Context(context) 

93 ctx.update( 

94 { 

95 "can_change": can_change, 

96 "show_delete_link": ( 

97 not is_popup 

98 and context["has_delete_permission"] 

99 and change 

100 and context.get("show_delete", True) 

101 ), 

102 "show_save_as_new": not is_popup 

103 and has_change_permission 

104 and change 

105 and save_as, 

106 "show_save_and_add_another": can_save_and_add_another, 

107 "show_save_and_continue": can_save_and_continue, 

108 "show_save": show_save and can_save, 

109 "show_close": not (show_save and can_save), 

110 } 

111 ) 

112 return ctx 

113 

114 

115@register.tag(name="submit_row") 

116def submit_row_tag(parser, token): 

117 return InclusionAdminNode( 

118 parser, token, func=submit_row, template_name="submit_line.html" 

119 ) 

120 

121 

122@register.tag(name="change_form_object_tools") 

123def change_form_object_tools_tag(parser, token): 

124 """Display the row of change form object tools.""" 

125 return InclusionAdminNode( 

126 parser, 

127 token, 

128 func=lambda context: context, 

129 template_name="change_form_object_tools.html", 

130 ) 

131 

132 

133@register.filter 

134def cell_count(inline_admin_form): 

135 """Return the number of cells used in a tabular inline.""" 

136 count = 1 # Hidden cell with hidden 'id' field 

137 for fieldset in inline_admin_form: 

138 # Count all visible fields. 

139 for line in fieldset: 

140 for field in line: 

141 try: 

142 is_hidden = field.field.is_hidden 

143 except AttributeError: 

144 is_hidden = field.field["is_hidden"] 

145 if not is_hidden: 

146 count += 1 

147 if inline_admin_form.formset.can_delete: 

148 # Delete checkbox 

149 count += 1 

150 return count