mirror of
https://github.com/django/django.git
synced 2025-10-26 23:26:08 +00:00
Fixed #13095 -- formfield_callback keyword argument is now more sane and works with widgets defined in ModelForm.Meta.widgets. Thanks, hvdklauw for bug report, vung for initial patch, and carljm for review.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@13730 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
from django.forms.models import modelform_factory, inlineformset_factory
|
||||
from django import forms
|
||||
from django.forms.models import modelform_factory, inlineformset_factory, modelformset_factory
|
||||
from django.test import TestCase
|
||||
|
||||
from models import User, UserSite, Restaurant, Manager
|
||||
|
||||
|
||||
class InlineFormsetTests(TestCase):
|
||||
def test_formset_over_to_field(self):
|
||||
"A formset over a ForeignKey with a to_field can be saved. Regression for #10243"
|
||||
@@ -156,3 +158,61 @@ class InlineFormsetTests(TestCase):
|
||||
# you can create a formset with an instance of None
|
||||
form = Form(instance=None)
|
||||
formset = FormSet(instance=None)
|
||||
|
||||
|
||||
class CustomWidget(forms.CharField):
|
||||
pass
|
||||
|
||||
|
||||
class UserSiteForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = UserSite
|
||||
widgets = {'data': CustomWidget}
|
||||
|
||||
|
||||
class Callback(object):
|
||||
|
||||
def __init__(self):
|
||||
self.log = []
|
||||
|
||||
def __call__(self, db_field, **kwargs):
|
||||
self.log.append((db_field, kwargs))
|
||||
return db_field.formfield(**kwargs)
|
||||
|
||||
|
||||
class FormfieldCallbackTests(TestCase):
|
||||
"""
|
||||
Regression for #13095: Using base forms with widgets
|
||||
defined in Meta should not raise errors.
|
||||
"""
|
||||
|
||||
def test_inlineformset_factory_default(self):
|
||||
Formset = inlineformset_factory(User, UserSite, form=UserSiteForm)
|
||||
form = Formset({}).forms[0]
|
||||
self.assertTrue(isinstance(form['data'].field.widget, CustomWidget))
|
||||
|
||||
def test_modelformset_factory_default(self):
|
||||
Formset = modelformset_factory(UserSite, form=UserSiteForm)
|
||||
form = Formset({}).forms[0]
|
||||
self.assertTrue(isinstance(form['data'].field.widget, CustomWidget))
|
||||
|
||||
def assertCallbackCalled(self, callback):
|
||||
id_field, user_field, data_field = UserSite._meta.fields
|
||||
expected_log = [
|
||||
(id_field, {}),
|
||||
(user_field, {}),
|
||||
(data_field, {'widget': CustomWidget}),
|
||||
]
|
||||
self.assertEqual(callback.log, expected_log)
|
||||
|
||||
def test_inlineformset_custom_callback(self):
|
||||
callback = Callback()
|
||||
inlineformset_factory(User, UserSite, form=UserSiteForm,
|
||||
formfield_callback=callback)
|
||||
self.assertCallbackCalled(callback)
|
||||
|
||||
def test_modelformset_custom_callback(self):
|
||||
callback = Callback()
|
||||
modelformset_factory(UserSite, form=UserSiteForm,
|
||||
formfield_callback=callback)
|
||||
self.assertCallbackCalled(callback)
|
||||
|
||||
Reference in New Issue
Block a user