summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorvgolubev <nakmak1998@gmail.com>2021-08-01 23:33:12 +0300
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-01-27 20:45:21 +0100
commite87f57fdb8dcdabc452bd15abd015bf6c9b1f7a8 (patch)
tree229f0d73438096bd90a93077b3fcda93f07e7151 /docs
parent0af9a5fc7d765aa05ea784e2c3237675f3bb4b49 (diff)
Fixed #26142 -- Allowed model formsets to prevent new object creation.
Thanks Jacob Walls, David Smith, and Mariusz Felisiak for reviews. Co-authored-by: parth <parthvin@gmail.com>
Diffstat (limited to 'docs')
-rw-r--r--docs/ref/forms/models.txt15
-rw-r--r--docs/releases/4.1.txt3
-rw-r--r--docs/topics/forms/modelforms.txt23
3 files changed, 37 insertions, 4 deletions
diff --git a/docs/ref/forms/models.txt b/docs/ref/forms/models.txt
index c0f0757b3e..9b0dbc964d 100644
--- a/docs/ref/forms/models.txt
+++ b/docs/ref/forms/models.txt
@@ -52,7 +52,7 @@ Model Form API reference. For introductory material about model forms, see the
``modelformset_factory``
========================
-.. function:: modelformset_factory(model, form=ModelForm, formfield_callback=None, formset=BaseModelFormSet, extra=1, can_delete=False, can_order=False, max_num=None, fields=None, exclude=None, widgets=None, validate_max=False, localized_fields=None, labels=None, help_texts=None, error_messages=None, min_num=None, validate_min=False, field_classes=None, absolute_max=None, can_delete_extra=True, renderer=None)
+.. function:: modelformset_factory(model, form=ModelForm, formfield_callback=None, formset=BaseModelFormSet, extra=1, can_delete=False, can_order=False, max_num=None, fields=None, exclude=None, widgets=None, validate_max=False, localized_fields=None, labels=None, help_texts=None, error_messages=None, min_num=None, validate_min=False, field_classes=None, absolute_max=None, can_delete_extra=True, renderer=None, edit_only=False)
Returns a ``FormSet`` class for the given ``model`` class.
@@ -67,16 +67,23 @@ Model Form API reference. For introductory material about model forms, see the
through to :func:`~django.forms.formsets.formset_factory`. See
:doc:`formsets </topics/forms/formsets>` for details.
+ The ``edit_only`` argument allows :ref:`preventing new objects creation
+ <model-formsets-edit-only>`.
+
See :ref:`model-formsets` for example usage.
.. versionchanged:: 4.0
The ``renderer`` argument was added.
+ .. versionchanged:: 4.1
+
+ The ``edit_only`` argument was added.
+
``inlineformset_factory``
=========================
-.. function:: inlineformset_factory(parent_model, model, form=ModelForm, formset=BaseInlineFormSet, fk_name=None, fields=None, exclude=None, extra=3, can_order=False, can_delete=True, max_num=None, formfield_callback=None, widgets=None, validate_max=False, localized_fields=None, labels=None, help_texts=None, error_messages=None, min_num=None, validate_min=False, field_classes=None, absolute_max=None, can_delete_extra=True, renderer=None)
+.. function:: inlineformset_factory(parent_model, model, form=ModelForm, formset=BaseInlineFormSet, fk_name=None, fields=None, exclude=None, extra=3, can_order=False, can_delete=True, max_num=None, formfield_callback=None, widgets=None, validate_max=False, localized_fields=None, labels=None, help_texts=None, error_messages=None, min_num=None, validate_min=False, field_classes=None, absolute_max=None, can_delete_extra=True, renderer=None, edit_only=False)
Returns an ``InlineFormSet`` using :func:`modelformset_factory` with
defaults of ``formset=``:class:`~django.forms.models.BaseInlineFormSet`,
@@ -90,3 +97,7 @@ Model Form API reference. For introductory material about model forms, see the
.. versionchanged:: 4.0
The ``renderer`` argument was added.
+
+ .. versionchanged:: 4.1
+
+ The ``edit_only`` argument was added.
diff --git a/docs/releases/4.1.txt b/docs/releases/4.1.txt
index f5e7a07bb3..6633262255 100644
--- a/docs/releases/4.1.txt
+++ b/docs/releases/4.1.txt
@@ -189,6 +189,9 @@ Forms
labels in ``<legend>`` tags via the new ``tag`` argument of
:meth:`~django.forms.BoundField.label_tag`.
+* The new ``edit_only`` argument for :func:`.modelformset_factory` and
+ :func:`.inlineformset_factory` allows preventing new objects creation.
+
Generic Views
~~~~~~~~~~~~~
diff --git a/docs/topics/forms/modelforms.txt b/docs/topics/forms/modelforms.txt
index cf79fc69c4..3045cefd9e 100644
--- a/docs/topics/forms/modelforms.txt
+++ b/docs/topics/forms/modelforms.txt
@@ -953,8 +953,8 @@ extra forms displayed.
Also, ``extra=0`` doesn't prevent creation of new model instances as you can
:ref:`add additional forms with JavaScript <understanding-the-managementform>`
-or send additional POST data. Formsets :ticket:`don't yet provide functionality
-<26142>` for an "edit only" view that prevents creation of new instances.
+or send additional POST data. See :ref:`model-formsets-edit-only` on how to do
+this.
If the value of ``max_num`` is greater than the number of existing related
objects, up to ``extra`` additional blank forms will be added to the formset,
@@ -972,6 +972,25 @@ so long as the total number of forms does not exceed ``max_num``::
A ``max_num`` value of ``None`` (the default) puts a high limit on the number
of forms displayed (1000). In practice this is equivalent to no limit.
+.. _model-formsets-edit-only:
+
+Preventing new objects creation
+-------------------------------
+
+.. versionadded:: 4.1
+
+Using the ``edit_only`` parameter, you can prevent creation of any new
+objects::
+
+ >>> AuthorFormSet = modelformset_factory(
+ ... Author,
+ ... fields=('name', 'title'),
+ ... edit_only=True,
+ ... )
+
+Here, the formset will only edit existing ``Author`` instances. No other
+objects will be created or edited.
+
Using a model formset in a view
-------------------------------