mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #22510 -- Harden field removal to only None.
Refs #8620. If we allow any value to remove form fields then we get name clashes with method names, media classes etc. There was a backwards incompatibility introduced meaning ModelForm subclasses with declared fields called media or clean would lose those fields. Field removal is now only permitted by using the sentinel value None. The docs have been slightly reworded to refer to removal of fields rather than shadowing. Thanks to gcbirzan for the report and initial patch, and several of the core team for opinions.
This commit is contained in:
@@ -982,10 +982,20 @@ classes::
|
||||
|
||||
.. versionadded:: 1.7
|
||||
|
||||
* It's possible to opt-out from a ``Field`` inherited from a parent class by
|
||||
shadowing it. While any non-``Field`` value works for this purpose, it's
|
||||
recommended to use ``None`` to make it explicit that a field is being
|
||||
nullified.
|
||||
* It's possible to declaratively remove a ``Field`` inherited from a parent
|
||||
class by setting the name to be ``None`` on the subclass. For example::
|
||||
|
||||
>>> from django import forms
|
||||
|
||||
>>> class ParentForm(forms.Form):
|
||||
... name = forms.CharField()
|
||||
... age = forms.IntegerField()
|
||||
|
||||
>>> class ChildForm(ParentForm):
|
||||
... name = None
|
||||
|
||||
>>> ChildForm().fields.keys()
|
||||
... ['age']
|
||||
|
||||
.. _form-prefix:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user