mirror of
https://github.com/jazzband/django-admin2.git
synced 2026-03-17 06:30:25 +00:00
173 lines
6 KiB
Python
173 lines
6 KiB
Python
from django import forms
|
|
from django.forms import modelform_factory
|
|
from django.test import TestCase
|
|
|
|
from ..models import Post
|
|
|
|
|
|
class ModelFormFactoryTest(TestCase):
|
|
|
|
def test_modelform_factory(self):
|
|
form_class = modelform_factory(Post, exclude=[])
|
|
self.assertTrue(form_class)
|
|
field = form_class.base_fields['title']
|
|
self.assertTrue(isinstance(field.widget, forms.TextInput))
|
|
|
|
|
|
class ModelFormTest(TestCase):
|
|
|
|
def test_custom_base_form(self):
|
|
class MyForm(forms.ModelForm):
|
|
pass
|
|
|
|
form_class = modelform_factory(model=Post, form=MyForm, exclude=[])
|
|
form = form_class()
|
|
self.assertTrue(isinstance(
|
|
form.fields['title'].widget,
|
|
forms.TextInput))
|
|
|
|
def test_declared_fields(self):
|
|
class MyForm(forms.ModelForm):
|
|
subtitle = forms.CharField()
|
|
|
|
form_class = modelform_factory(model=Post, form=MyForm, exclude=[])
|
|
self.assertTrue(isinstance(
|
|
form_class.base_fields['subtitle'].widget,
|
|
forms.TextInput))
|
|
self.assertTrue(isinstance(
|
|
form_class.declared_fields['subtitle'].widget,
|
|
forms.TextInput))
|
|
|
|
self.assertTrue(isinstance(
|
|
form_class.base_fields['title'].widget,
|
|
forms.TextInput))
|
|
# title is not defined in declared fields
|
|
|
|
def test_additional_form_fields(self):
|
|
class MyForm(forms.ModelForm):
|
|
subtitle = forms.CharField()
|
|
|
|
form_class = modelform_factory(model=Post, form=MyForm, exclude=[])
|
|
form = form_class()
|
|
self.assertTrue(isinstance(
|
|
form.fields['subtitle'].widget,
|
|
forms.TextInput))
|
|
|
|
def test_subclassing_forms(self):
|
|
class MyForm(forms.ModelForm):
|
|
subtitle = forms.CharField()
|
|
|
|
class Meta:
|
|
model = Post
|
|
exclude = []
|
|
|
|
class ChildForm(MyForm):
|
|
created = forms.DateField()
|
|
|
|
form_class = modelform_factory(model=Post, form=ChildForm, exclude=[])
|
|
form = form_class()
|
|
self.assertTrue(isinstance(
|
|
form.fields['title'].widget,
|
|
forms.TextInput))
|
|
self.assertTrue(isinstance(
|
|
form.fields['subtitle'].widget,
|
|
forms.TextInput))
|
|
self.assertTrue(isinstance(
|
|
form.fields['created'].widget,
|
|
forms.DateInput))
|
|
|
|
|
|
class FieldWidgetTest(TestCase):
|
|
|
|
def test_dont_overwrite_none_default_widget(self):
|
|
# we don't create the floppyform EmailInput for the email field here
|
|
# since we have overwritten the default widget. However we replace the
|
|
# django textarea with a floppyforms Textarea
|
|
email_input = forms.widgets.Textarea()
|
|
|
|
class MyForm(forms.ModelForm):
|
|
email = forms.EmailField(widget=email_input)
|
|
|
|
class Meta:
|
|
model = Post
|
|
exclude = []
|
|
|
|
widget = MyForm().fields['email'].widget
|
|
self.assertFalse(isinstance(widget, forms.EmailInput))
|
|
self.assertTrue(isinstance(widget, forms.Textarea))
|
|
|
|
def test_float_field(self):
|
|
class MyForm(forms.ModelForm):
|
|
float = forms.FloatField()
|
|
|
|
form_class = modelform_factory(model=Post, form=MyForm, exclude=[])
|
|
widget = form_class().fields['float'].widget
|
|
self.assertTrue(isinstance(widget, forms.NumberInput))
|
|
self.assertEqual(widget.input_type, 'number')
|
|
|
|
def test_decimal_field(self):
|
|
class MyForm(forms.ModelForm):
|
|
decimal = forms.DecimalField()
|
|
|
|
form_class = modelform_factory(model=Post, form=MyForm, exclude=[])
|
|
widget = form_class().fields['decimal'].widget
|
|
self.assertTrue(isinstance(widget, forms.NumberInput))
|
|
self.assertEqual(widget.input_type, 'number')
|
|
|
|
def test_integer_field(self):
|
|
class MyForm(forms.ModelForm):
|
|
integer = forms.IntegerField()
|
|
|
|
form_class = modelform_factory(model=Post, form=MyForm, exclude=[])
|
|
widget = form_class().fields['integer'].widget
|
|
self.assertTrue(isinstance(widget, forms.NumberInput))
|
|
self.assertEqual(widget.input_type, 'number')
|
|
|
|
def test_email_field(self):
|
|
class MyForm(forms.ModelForm):
|
|
email = forms.EmailField()
|
|
|
|
form_class = modelform_factory(model=Post, form=MyForm, exclude=[])
|
|
widget = form_class().fields['email'].widget
|
|
self.assertTrue(isinstance(widget, forms.EmailInput))
|
|
self.assertEqual(widget.input_type, 'email')
|
|
|
|
def test_url_field(self):
|
|
class MyForm(forms.ModelForm):
|
|
url = forms.URLField()
|
|
|
|
form_class = modelform_factory(model=Post, form=MyForm, exclude=[])
|
|
widget = form_class().fields['url'].widget
|
|
self.assertTrue(isinstance(widget, forms.URLInput))
|
|
self.assertEqual(widget.input_type, 'url')
|
|
|
|
def test_slug_field(self):
|
|
class MyForm(forms.ModelForm):
|
|
slug = forms.SlugField()
|
|
|
|
form_class = modelform_factory(model=Post, form=MyForm, exclude=[])
|
|
widget = form_class().fields['slug'].widget
|
|
self.assertTrue(isinstance(widget, forms.TextInput))
|
|
self.assertEqual(widget.input_type, 'text')
|
|
|
|
def test_genericipaddress_field(self):
|
|
class MyForm(forms.ModelForm):
|
|
ipaddress = forms.GenericIPAddressField()
|
|
|
|
form_class = modelform_factory(model=Post, form=MyForm, exclude=[])
|
|
widget = form_class().fields['ipaddress'].widget
|
|
self.assertTrue(isinstance(widget, forms.TextInput))
|
|
self.assertEqual(widget.input_type, 'text')
|
|
|
|
def test_splitdatetime_field(self):
|
|
class MyForm(forms.ModelForm):
|
|
splitdatetime = forms.SplitDateTimeField()
|
|
|
|
form_class = modelform_factory(model=Post, form=MyForm, exclude=[])
|
|
widget = form_class().fields['splitdatetime'].widget
|
|
self.assertTrue(isinstance(
|
|
widget, forms.SplitDateTimeWidget))
|
|
self.assertTrue(isinstance(
|
|
widget.widgets[0], forms.DateInput))
|
|
self.assertTrue(isinstance(
|
|
widget.widgets[1], forms.TimeInput))
|