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
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1import json
3from django import template
4from django.template.context import Context
6from .base import InclusionAdminNode
8register = template.Library()
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)
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 )
42 context.update(
43 {
44 "prepopulated_fields": prepopulated_fields,
45 "prepopulated_fields_json": json.dumps(prepopulated_fields_json),
46 }
47 )
48 return context
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 )
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
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 )
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 )
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