MCPcopy
hub / github.com/django/django / SplitArrayWidget

Class SplitArrayWidget

django/contrib/postgres/forms/array.py:115–179  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

113
114
115class SplitArrayWidget(forms.Widget):
116 template_name = "postgres/widgets/split_array.html"
117
118 def __init__(self, widget, size, **kwargs):
119 self.widget = widget() if isinstance(widget, type) else widget
120 self.size = size
121 super().__init__(**kwargs)
122
123 @property
124 def is_hidden(self):
125 return self.widget.is_hidden
126
127 def value_from_datadict(self, data, files, name):
128 return [
129 self.widget.value_from_datadict(data, files, "%s_%s" % (name, index))
130 for index in range(self.size)
131 ]
132
133 def value_omitted_from_data(self, data, files, name):
134 return all(
135 self.widget.value_omitted_from_data(data, files, "%s_%s" % (name, index))
136 for index in range(self.size)
137 )
138
139 def id_for_label(self, id_):
140 # See the comment for RadioSelect.id_for_label()
141 if id_:
142 id_ += "_0"
143 return id_
144
145 def get_context(self, name, value, attrs=None):
146 attrs = {} if attrs is None else attrs
147 context = super().get_context(name, value, attrs)
148 if self.is_localized:
149 self.widget.is_localized = self.is_localized
150 value = value or []
151 context["widget"]["subwidgets"] = []
152 final_attrs = self.build_attrs(attrs)
153 id_ = final_attrs.get("id")
154 for i in range(max(len(value), self.size)):
155 try:
156 widget_value = value[i]
157 except IndexError:
158 widget_value = None
159 if id_:
160 final_attrs = {**final_attrs, "id": "%s_%s" % (id_, i)}
161 context["widget"]["subwidgets"].append(
162 self.widget.get_context(name + "_%s" % i, widget_value, final_attrs)[
163 "widget"
164 ]
165 )
166 return context
167
168 @property
169 def media(self):
170 return self.widget.media
171
172 def __deepcopy__(self, memo):

Callers 6

test_get_contextMethod · 0.90
test_renderMethod · 0.90
test_render_attrsMethod · 0.90
__init__Method · 0.85

Calls

no outgoing calls

Tested by 5

test_get_contextMethod · 0.72
test_renderMethod · 0.72
test_render_attrsMethod · 0.72