mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Fixed #35748 -- Documented that fields are excluded from a ModelForm when formfield() returns None.
Co-authored-by: Sarah Boyce <42296566+sarahboyce@users.noreply.github.com>
This commit is contained in:
parent
4b65dc2f21
commit
e1d226bc1c
@ -645,6 +645,9 @@ delegate further handling to the parent class. This might require you to write
|
|||||||
a custom form field (and even a form widget). See the :doc:`forms documentation
|
a custom form field (and even a form widget). See the :doc:`forms documentation
|
||||||
</topics/forms/index>` for information about this.
|
</topics/forms/index>` for information about this.
|
||||||
|
|
||||||
|
If you wish to exclude the field from the :class:`~django.forms.ModelForm`, you
|
||||||
|
can override the :meth:`~Field.formfield` method to return ``None``.
|
||||||
|
|
||||||
Continuing our ongoing example, we can write the :meth:`~Field.formfield` method
|
Continuing our ongoing example, we can write the :meth:`~Field.formfield` method
|
||||||
as::
|
as::
|
||||||
|
|
||||||
@ -652,8 +655,12 @@ as::
|
|||||||
# ...
|
# ...
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
# This is a fairly standard way to set up some defaults
|
# Exclude the field from the ModelForm when some condition is met.
|
||||||
# while letting the caller override them.
|
some_condition = kwargs.get("some_condition", False)
|
||||||
|
if some_condition:
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Set up some defaults while letting the caller override them.
|
||||||
defaults = {"form_class": MyFormField}
|
defaults = {"form_class": MyFormField}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return super().formfield(**defaults)
|
return super().formfield(**defaults)
|
||||||
|
@ -2445,6 +2445,9 @@ Field API reference
|
|||||||
Returns the default :class:`django.forms.Field` of this field for
|
Returns the default :class:`django.forms.Field` of this field for
|
||||||
:class:`~django.forms.ModelForm`.
|
:class:`~django.forms.ModelForm`.
|
||||||
|
|
||||||
|
If :meth:`~Field.formfield` is overridden to return ``None``, this field
|
||||||
|
is excluded from the :class:`~django.forms.ModelForm`.
|
||||||
|
|
||||||
By default, if both ``form_class`` and ``choices_form_class`` are
|
By default, if both ``form_class`` and ``choices_form_class`` are
|
||||||
``None``, it uses :class:`~django.forms.CharField`. If the field has
|
``None``, it uses :class:`~django.forms.CharField`. If the field has
|
||||||
:attr:`~django.db.models.Field.choices` and ``choices_form_class``
|
:attr:`~django.db.models.Field.choices` and ``choices_form_class``
|
||||||
|
Loading…
Reference in New Issue
Block a user