1
from django.forms.models import modelform_factory, inlineformset_factory
1
from django import forms
2
from django.forms.models import modelform_factory, inlineformset_factory, modelformset_factory
2
3
from django.test import TestCase
4
5
from models import User, UserSite, Restaurant, Manager
6
8
class InlineFormsetTests(TestCase):
7
9
def test_formset_over_to_field(self):
8
10
"A formset over a ForeignKey with a to_field can be saved. Regression for #10243"
156
158
# you can create a formset with an instance of None
157
159
form = Form(instance=None)
158
160
formset = FormSet(instance=None)
163
class CustomWidget(forms.CharField):
167
class UserSiteForm(forms.ModelForm):
170
widgets = {'data': CustomWidget}
173
class Callback(object):
178
def __call__(self, db_field, **kwargs):
179
self.log.append((db_field, kwargs))
180
return db_field.formfield(**kwargs)
183
class FormfieldCallbackTests(TestCase):
185
Regression for #13095: Using base forms with widgets
186
defined in Meta should not raise errors.
189
def test_inlineformset_factory_default(self):
190
Formset = inlineformset_factory(User, UserSite, form=UserSiteForm)
191
form = Formset({}).forms[0]
192
self.assertTrue(isinstance(form['data'].field.widget, CustomWidget))
194
def test_modelformset_factory_default(self):
195
Formset = modelformset_factory(UserSite, form=UserSiteForm)
196
form = Formset({}).forms[0]
197
self.assertTrue(isinstance(form['data'].field.widget, CustomWidget))
199
def assertCallbackCalled(self, callback):
200
id_field, user_field, data_field = UserSite._meta.fields
204
(data_field, {'widget': CustomWidget}),
206
self.assertEqual(callback.log, expected_log)
208
def test_inlineformset_custom_callback(self):
209
callback = Callback()
210
inlineformset_factory(User, UserSite, form=UserSiteForm,
211
formfield_callback=callback)
212
self.assertCallbackCalled(callback)
214
def test_modelformset_custom_callback(self):
215
callback = Callback()
216
modelformset_factory(UserSite, form=UserSiteForm,
217
formfield_callback=callback)
218
self.assertCallbackCalled(callback)