from django.forms.widgets import TextInput, DateInput, DateTimeInput, TimeInput class MyEmailInput(TextInput): input_type = 'email' class MyNumberInput(TextInput): input_type = 'number' class MyTelephoneInput(TextInput): input_type = 'tel' class MyDateInput(DateInput): input_type = 'date' class MyDateTimeInput(DateTimeInput): input_type = 'datetime' class MyTimeInput(TimeInput): input_type = 'time' ... from django.contrib.localflavor.us.forms import USPhoneNumberField from my.contrib.forms.widgets import * class MyModelForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(MyModelForm, self).__init__(*args, **kwargs) self.fields['return_date'].widget = MyDateInput(attrs={'class':'date'}) self.fields['passenger_count'].widget = MyNumberInput(attrs={'min':0}) self.fields['email'].widget = MyEmailInput() phone = USPhoneNumberField( required=False, help_text=u'Phone numbers must be in XXX-XXX-XXXX format', label=u'Phone Number', widget=MyTelephoneInput() )