Skip to content

Commit dcc6168

Browse files
committed
extra=3
1 parent 60e0fb6 commit dcc6168

File tree

3 files changed

+104
-13
lines changed

3 files changed

+104
-13
lines changed

django_mongodb_backend/fields/embedded_model_array.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from django.db.models import Field
2+
13
from ..forms import EmbeddedModelArrayFormField
24
from . import EmbeddedModelField
35
from .array import ArrayField
@@ -27,12 +29,15 @@ def get_db_prep_value(self, value, connection, prepared=False):
2729
return value
2830

2931
def formfield(self, **kwargs):
30-
return super().formfield(
32+
# Skip ArrayField.formfield() which has unneeded base_field.
33+
return Field.formfield(
34+
self,
3135
**{
3236
"form_class": EmbeddedModelArrayFormField,
3337
"model": self.base_field.embedded_model,
34-
"max_length": self.size,
38+
"max_length": self.max_size,
3539
"prefix": self.name,
40+
"length": self.size,
3641
**kwargs,
37-
}
42+
},
3843
)

django_mongodb_backend/forms/fields/embedded_model_array.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ def models_to_dicts(models):
1414

1515

1616
class EmbeddedModelArrayFormField(forms.Field):
17-
def __init__(self, model, prefix, max_length=None, *args, **kwargs):
18-
kwargs.pop("base_field")
17+
def __init__(self, model, prefix, max_length=None, length=None, *args, **kwargs):
1918
self.model = model
2019
self.prefix = prefix
2120
self.formset = formset_factory(
2221
form=modelform_factory(model, fields="__all__"),
2322
can_delete=True,
2423
max_num=max_length,
24+
extra=3,
2525
)
2626
kwargs["widget"] = MultipleEmbeddedModelWidget()
2727
super().__init__(*args, **kwargs)

tests/model_forms_/test_multiple_embedded_model.py

Lines changed: 94 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,8 @@ def test_rendering(self):
208208
str(form.fields["reviews"].get_bound_field(form, "reviews")),
209209
"""
210210
<table>
211-
<tbody><tr>
211+
<tbody>
212+
<tr>
212213
<th><label for="id_reviews-0-title">Title:</label></th>
213214
<td>
214215
<input type="text" name="reviews-0-title" maxlength="255" id="id_reviews-0-title">
@@ -225,9 +226,50 @@ def test_rendering(self):
225226
<td>
226227
<input type="checkbox" name="reviews-0-DELETE" id="id_reviews-0-DELETE">
227228
</td>
228-
</tr></tbody>
229+
</tr>
230+
</tbody>
231+
<tbody>
232+
<tr>
233+
<th><label for="id_reviews-1-title">Title:</label></th>
234+
<td>
235+
<input type="text" name="reviews-1-title" maxlength="255" id="id_reviews-1-title">
236+
</td>
237+
</tr>
238+
<tr>
239+
<th><label for="id_reviews-1-rating">Rating:</label></th>
240+
<td>
241+
<input type="number" name="reviews-1-rating" id="id_reviews-1-rating">
242+
</td>
243+
</tr>
244+
<tr>
245+
<th><label for="id_reviews-1-DELETE">Delete:</label></th>
246+
<td>
247+
<input type="checkbox" name="reviews-1-DELETE" id="id_reviews-1-DELETE">
248+
</td>
249+
</tr>
250+
</tbody>
251+
<tbody>
252+
<tr>
253+
<th><label for="id_reviews-2-title">Title:</label></th>
254+
<td>
255+
<input type="text" name="reviews-2-title" maxlength="255" id="id_reviews-2-title">
256+
</td>
257+
</tr>
258+
<tr>
259+
<th><label for="id_reviews-2-rating">Rating:</label></th>
260+
<td>
261+
<input type="number" name="reviews-2-rating" id="id_reviews-2-rating">
262+
</td>
263+
</tr>
264+
<tr>
265+
<th><label for="id_reviews-2-DELETE">Delete:</label></th>
266+
<td>
267+
<input type="checkbox" name="reviews-2-DELETE" id="id_reviews-2-DELETE">
268+
</td>
269+
</tr>
270+
</tbody>
229271
</table>
230-
<input type="hidden" name="reviews-TOTAL_FORMS" value="1"
272+
<input type="hidden" name="reviews-TOTAL_FORMS" value="3"
231273
id="id_reviews-TOTAL_FORMS"><input type="hidden"
232274
name="reviews-INITIAL_FORMS" value="0"
233275
id="id_reviews-INITIAL_FORMS">
@@ -246,7 +288,8 @@ def test_rendering_initial(self):
246288
str(form.fields["reviews"].get_bound_field(form, "reviews")),
247289
"""
248290
<table>
249-
<tbody><tr>
291+
<tbody>
292+
<tr>
250293
<th><label for="id_reviews-0-title">Title:</label></th>
251294
<td>
252295
<input type="text" name="reviews-0-title" maxlength="255"
@@ -265,8 +308,10 @@ def test_rendering_initial(self):
265308
<td>
266309
<input type="checkbox" name="reviews-0-DELETE" id="id_reviews-0-DELETE">
267310
</td>
268-
</tr></tbody>
269-
<tbody><tr>
311+
</tr>
312+
</tbody>
313+
<tbody>
314+
<tr>
270315
<th><label for="id_reviews-1-title">Title:</label></th>
271316
<td>
272317
<input type="text" name="reviews-1-title" maxlength="255" id="id_reviews-1-title">
@@ -283,9 +328,50 @@ def test_rendering_initial(self):
283328
<td>
284329
<input type="checkbox" name="reviews-1-DELETE" id="id_reviews-1-DELETE">
285330
</td>
286-
</tr></tbody>
331+
</tr>
332+
</tbody>
333+
<tbody>
334+
<tr>
335+
<th><label for="id_reviews-2-title">Title:</label></th>
336+
<td>
337+
<input type="text" name="reviews-2-title" maxlength="255" id="id_reviews-2-title">
338+
</td>
339+
</tr>
340+
<tr>
341+
<th><label for="id_reviews-2-rating">Rating:</label></th>
342+
<td>
343+
<input type="number" name="reviews-2-rating" id="id_reviews-2-rating">
344+
</td>
345+
</tr>
346+
<tr>
347+
<th><label for="id_reviews-2-DELETE">Delete:</label></th>
348+
<td>
349+
<input type="checkbox" name="reviews-2-DELETE" id="id_reviews-2-DELETE">
350+
</td>
351+
</tr>
352+
</tbody>
353+
<tbody>
354+
<tr>
355+
<th><label for="id_reviews-3-title">Title:</label></th>
356+
<td>
357+
<input type="text" name="reviews-3-title" maxlength="255" id="id_reviews-3-title">
358+
</td>
359+
</tr>
360+
<tr>
361+
<th><label for="id_reviews-3-rating">Rating:</label></th>
362+
<td>
363+
<input type="number" name="reviews-3-rating" id="id_reviews-3-rating">
364+
</td>
365+
</tr>
366+
<tr>
367+
<th><label for="id_reviews-3-DELETE">Delete:</label></th>
368+
<td>
369+
<input type="checkbox" name="reviews-3-DELETE" id="id_reviews-3-DELETE">
370+
</td>
371+
</tr>
372+
</tbody>
287373
</table>
288-
<input type="hidden" name="reviews-TOTAL_FORMS" value="2"
374+
<input type="hidden" name="reviews-TOTAL_FORMS" value="4"
289375
id="id_reviews-TOTAL_FORMS"><input type="hidden"
290376
name="reviews-INITIAL_FORMS" value="1"
291377
id="id_reviews-INITIAL_FORMS">

0 commit comments

Comments
 (0)