6
6
from django.conf import settings
7
7
from django.test import TestCase
9
from models import Person, RealPerson, Triple, FilePathModel, Article, Publication, CustomFF, Author, Author1
9
from models import Person, RealPerson, Triple, FilePathModel, Article, \
10
Publication, CustomFF, Author, Author1, Homepage
12
13
class ModelMultipleChoiceFieldTests(TestCase):
212
213
def test_11183(self):
213
214
form1 = ModelChoiceForm()
214
215
field1 = form1.fields['person']
215
# To allow the widget to change the queryset of field1.widget.choices correctly,
216
# To allow the widget to change the queryset of field1.widget.choices correctly,
216
217
# without affecting other forms, the following must hold:
217
218
self.assert_(field1 is not ModelChoiceForm.base_fields['person'])
218
219
self.assert_(field1.widget.choices.field is field1)
221
class HomepageForm(forms.ModelForm):
225
class URLFieldTests(TestCase):
226
def test_url_on_modelform(self):
227
"Check basic URL field validation on model forms"
228
self.assertFalse(HomepageForm({'url': 'foo'}).is_valid())
229
self.assertFalse(HomepageForm({'url': 'http://'}).is_valid())
230
self.assertFalse(HomepageForm({'url': 'http://example'}).is_valid())
231
self.assertFalse(HomepageForm({'url': 'http://example.'}).is_valid())
232
self.assertFalse(HomepageForm({'url': 'http://com.'}).is_valid())
234
self.assertTrue(HomepageForm({'url': 'http://localhost'}).is_valid())
235
self.assertTrue(HomepageForm({'url': 'http://example.com'}).is_valid())
236
self.assertTrue(HomepageForm({'url': 'http://www.example.com'}).is_valid())
237
self.assertTrue(HomepageForm({'url': 'http://www.example.com:8000'}).is_valid())
238
self.assertTrue(HomepageForm({'url': 'http://www.example.com/test'}).is_valid())
239
self.assertTrue(HomepageForm({'url': 'http://www.example.com:8000/test'}).is_valid())
240
self.assertTrue(HomepageForm({'url': 'http://example.com/foo/bar'}).is_valid())
242
def test_http_prefixing(self):
243
"If the http:// prefix is omitted on form input, the field adds it again. (Refs #13613)"
244
form = HomepageForm({'url': 'example.com'})
246
# self.assertTrue(form.is_valid())
247
# self.assertEquals(form.cleaned_data['url'], 'http://example.com/')
249
form = HomepageForm({'url': 'example.com/test'})
251
# self.assertTrue(form.is_valid())
252
# self.assertEquals(form.cleaned_data['url'], 'http://example.com/test')
255
class FormFieldCallbackTests(TestCase):
257
def test_baseform_with_widgets_in_meta(self):
258
"""Regression for #13095: Using base forms with widgets defined in Meta should not raise errors."""
259
widget = forms.Textarea()
261
class BaseForm(forms.ModelForm):
264
widgets = {'name': widget}
266
Form = modelform_factory(Person, form=BaseForm)
267
self.assertTrue(Form.base_fields['name'].widget is widget)
269
def test_custom_callback(self):
270
"""Test that a custom formfield_callback is used if provided"""
274
def callback(db_field, **kwargs):
275
callback_args.append((db_field, kwargs))
276
return db_field.formfield(**kwargs)
278
widget = forms.Textarea()
280
class BaseForm(forms.ModelForm):
283
widgets = {'name': widget}
285
_ = modelform_factory(Person, form=BaseForm,
286
formfield_callback=callback)
287
id_field, name_field = Person._meta.fields
289
self.assertEqual(callback_args,
290
[(id_field, {}), (name_field, {'widget': widget})])
292
def test_bad_callback(self):
293
# A bad callback provided by user still gives an error
294
self.assertRaises(TypeError, modelform_factory, Person,
295
formfield_callback='not a function or callable')