mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Merge pull request #1382 from loic/ticket19617
Fixed #19617 -- Refactored form metaclasses to support more inheritance scenarios.
This commit is contained in:
@@ -1802,3 +1802,39 @@ class M2mHelpTextTest(TestCase):
|
||||
html = form.as_p()
|
||||
self.assertInHTML('<ul id="id_status">', html)
|
||||
self.assertInHTML(dreaded_help_text, html, count=0)
|
||||
|
||||
|
||||
class ModelFormInheritanceTests(TestCase):
|
||||
def test_form_subclass_inheritance(self):
|
||||
class Form(forms.Form):
|
||||
age = forms.IntegerField()
|
||||
|
||||
class ModelForm(forms.ModelForm, Form):
|
||||
class Meta:
|
||||
model = Writer
|
||||
fields = '__all__'
|
||||
|
||||
self.assertEqual(list(ModelForm().fields.keys()), ['name', 'age'])
|
||||
|
||||
def test_field_shadowing(self):
|
||||
class ModelForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Writer
|
||||
fields = '__all__'
|
||||
|
||||
class Mixin(object):
|
||||
age = None
|
||||
|
||||
class Form(forms.Form):
|
||||
age = forms.IntegerField()
|
||||
|
||||
class Form2(forms.Form):
|
||||
foo = forms.IntegerField()
|
||||
|
||||
self.assertEqual(list(ModelForm().fields.keys()), ['name'])
|
||||
self.assertEqual(list(type(str('NewForm'), (Mixin, Form), {})().fields.keys()), [])
|
||||
self.assertEqual(list(type(str('NewForm'), (Form2, Mixin, Form), {})().fields.keys()), ['foo'])
|
||||
self.assertEqual(list(type(str('NewForm'), (Mixin, ModelForm, Form), {})().fields.keys()), ['name'])
|
||||
self.assertEqual(list(type(str('NewForm'), (ModelForm, Mixin, Form), {})().fields.keys()), ['name'])
|
||||
self.assertEqual(list(type(str('NewForm'), (ModelForm, Form, Mixin), {})().fields.keys()), ['name', 'age'])
|
||||
self.assertEqual(list(type(str('NewForm'), (ModelForm, Form), {'age': None})().fields.keys()), ['name'])
|
||||
|
||||
Reference in New Issue
Block a user