summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
authorMarc Tamlyn <marc.tamlyn@gmail.com>2014-05-24 10:52:18 +0100
committerMarc Tamlyn <marc.tamlyn@gmail.com>2014-05-24 13:10:50 +0100
commit9fb0f5dddc4cf7f2d294af1bcde2c359cffd90a5 (patch)
tree5c007e3490626084d43267def381a57a08833c11 /django/forms
parentf47e226ff7d2460ebe587d4fc1565b113b1c709f (diff)
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.
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/forms.py4
1 files changed, 2 insertions, 2 deletions
diff --git a/django/forms/forms.py b/django/forms/forms.py
index f868165977..b5cf17f4eb 100644
--- a/django/forms/forms.py
+++ b/django/forms/forms.py
@@ -92,8 +92,8 @@ class DeclarativeFieldsMetaclass(MediaDefiningClass):
declared_fields.update(base.declared_fields)
# Field shadowing.
- for attr in base.__dict__.keys():
- if attr in declared_fields:
+ for attr, value in base.__dict__.items():
+ if value is None and attr in declared_fields:
declared_fields.pop(attr)
new_class.base_fields = declared_fields