class ProfileEditForm(forms.ModelForm): present = datetime.datetime.now().year date_of_birth = forms.DateField(widget=SelectDateWidget( attrs={'style': 'width: 32.5%; display: inline-block;'}, years=range(1950, present))) class Meta: model = Profile fields = ('date_of_birth', 'city', 'country', 'education', 'photo')
class Meta: model = Resume fields = ( 'post', 'category', 'schedule', 'type_employment', 'wage_min', 'type_wages', 'fio', 'photo', 'dob', 'sex', 'marital_status', 'experience', 'professional_skills', 'education', 'educational_institution', 'major_subject', 'extras_education', 'personal_qualities', 'driver_license', 'willing_travel', 'smoke', 'summary', 'phone1', 'other_phone1', 'email', 'icq', 'skype', 'city', ) widgets = { 'photo': ImageWidget(attrs={}), 'professional_skills': forms.Textarea(attrs={ 'class': 'span12', 'rows': 3 }), 'extras_education': forms.Textarea(attrs={ 'class': 'span12', 'rows': 3 }), 'personal_qualities': forms.Textarea(attrs={ 'class': 'span12', 'rows': 3 }), 'dob': SelectDateWidget(attrs={'class': 'span4'}, years=range(1930, datetime.datetime.now().year - 14)), }
class UserInfo(forms.ModelForm): """ ``个人资料`` sign 签名 job 工作 first_name 名 last_name 姓 sex 性别 birthday 生日 country 国家 state 州省 city 区县 qq qq号码 weibo 微博帐号 phone_number 电话号码 """ # TODO : 未完成 SEX_CHOICES = (('M', u'男'), ('F', u'女')) sign = forms.CharField(label=u'签名', widget=forms.Textarea(attrs={ 'class': 'span11', 'rows': '4', })) job = forms.ChoiceField(label=u'职业', widget=forms.Select(attrs={'class': 'span10'})) first_name = forms.CharField( label=u'名', widget=forms.TextInput(attrs={'class': 'span10'})) last_name = forms.CharField( label=u'姓', widget=forms.TextInput(attrs={'class': 'span10'})) sex = forms.ChoiceField( label=u'性别', choices=SEX_CHOICES, widget=forms.RadioSelect(attrs={'class': 'text-info'})) birthday = forms.DateTimeField(label=u'生日', widget=SelectDateWidget( years=get_last_70_year_range(), attrs={'class': 'span10'})) country = forms.CharField( label=u'国家', widget=forms.Select(attrs={'class': 'input-small'})) state = forms.CharField( label=u'州省', widget=forms.Select(attrs={'class': 'input-small'})) city = forms.CharField(label=u'市县', widget=forms.Select(attrs={'class': 'input-small'})) qq = forms.IntegerField(label=u'QQ', widget=forms.TextInput(attrs={'class': 'span10'})) weibo = forms.CharField(label=u'微博', widget=forms.TextInput(attrs={'class': 'span10'})) phone_number = forms.CharField( label=u'手机号码', widget=forms.TextInput(attrs={'class': 'span10'})) class Meta: model = MyUser fields = ('sign', 'job', 'first_name', 'last_name', 'sex', 'birthday', 'country', 'state', 'city', 'qq', 'weibo', 'phone_number')
class SignupForm(forms.ModelForm): confirm_password = forms.CharField(widget=forms.PasswordInput) birthday = forms.DateField(widget=SelectDateWidget( years=range(2015, 1900, -1))) class Meta: model = Guest fields = [ 'username', 'password', 'first_name', 'last_name', 'birthday', 'email', 'gender', 'avatar' ]
class EventForm(forms.ModelForm): CHOICES = [('1', 'I'), ('2', 'II'), ('3', 'III'), ('4', 'IV'), ] # category = forms.MultipleChoiceField(choices=CHOICES, widget=forms.CheckboxSelectMultiple,) start_date = forms.DateField(widget=SelectDateWidget(years=range(2016, 2050))) end_date = forms.DateField(widget=SelectDateWidget(years=range(2016, 2050))) class Meta: model = Event fields = ('name', 'description', 'start_date', 'end_date') widgets = {'name': forms.TextInput(attrs={'placeholder': 'Event Name', 'class': 'form-control', 'id': 'event_name'}), 'description': forms.Textarea(attrs={'placeholder': 'Description', 'class': 'form-control', 'id': 'event_desc'}), }
class SignUpForm(forms.ModelForm): confirm_password = forms.PasswordInput() captcha = CaptchaField() birthday = forms.DateField(widget=SelectDateWidget( years=range(datetime.date.today().year, 1930, -1))) class Meta: model = myUser fields = [ 'username', 'password', 'first_name', 'last_name', 'birthday', 'email', 'male', 'profile_pic', 'cover_pic' ]
class MoreInfo(forms.ModelForm): dob = forms.DateField(widget=SelectDateWidget(years=DOY)) class Meta: model = student fields = [ 'location', 'degree', 'college', 'year', 'dob', ]
class AppointmentForm(forms.Form): #a_doctor = forms.CharField( label='Doctor', max_length=200, required=False, # widget=forms.TextInput( attrs={'placeholder': 'Doctor Email'}), ) #a_patient = forms.CharField( label='Patient', max_length=200, required=False, # widget=forms.TextInput( attrs={'placeholder': 'Patient Email'}), ) a_doctor = forms.ModelChoiceField( queryset=Doctor.objects, empty_label=None, required=False, label='Doctor', widget=forms.Select(attrs={'class': 'chzn-select'})) a_patient = forms.ModelChoiceField( queryset=Patient.objects, empty_label=None, required=False, label='Patient', widget=forms.Select(attrs={'class': 'chzn-select'})) a_title = forms.CharField( label='Title', max_length=200, required=True, ) a_description = forms.CharField( label='Description', max_length=1000, widget=forms.Textarea, ) a_date = forms.DateField( label='Date', required=True, initial=datetime.today, widget=SelectDateWidget(attrs={'class': 'smallDrop'})) a_starttime = forms.TimeField( label='Start Time', required=True, widget=forms.TextInput(attrs={'placeholder': '2:00 PM'}), input_formats=('%I:%M %p', '%H:%M', '%I:%M:%S %p', '%H:%M:%S'), ) a_endtime = forms.TimeField( label='End Time', required=True, widget=forms.TextInput(attrs={'placeholder': '2:30 PM'}), input_formats=('%I:%M %p', '%H:%M', '%I:%M:%S %p', '%H:%M:%S'), )
def __init__(self, *args, **kwargs): super(CandidateUserProfileForm, self).__init__(*args, **kwargs) self.fields['birthday'].required = True year_max = timezone.now().year - 10 year_min = year_max - 70 self.fields['birthday'].widget = SelectDateWidget( years=range(year_min, year_max)) self.fields['cell_phone'].required = True self.fields['local_address1'].required = True self.fields['local_city'].required = True self.fields['local_state'].required = True self.fields['local_zip'].required = True
class BasicProfileForm(forms.ModelForm): CHOICES = [('M', 'Male'), ('F', 'Female')] gender = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect) dob = forms.DateField(widget=SelectDateWidget(years=range(1980, 2017))) class Meta: model = UserProfile fields = ( 'name', 'dob', 'gender', 'birthplace', 'contact', 'alternate_contact', ) widgets = { 'name': forms.TextInput( attrs={ 'placeholder': 'Enter Name', 'id': 'form-name', 'class': 'form-control' }), 'birthplace': forms.TextInput( attrs={ 'placeholder': 'Enter Birth Place', 'id': 'form-birthplace', 'class': 'form-control' }), 'contact': forms.TextInput( attrs={ 'placeholder': 'Enter Contact No.', 'id': 'form-contact', 'class': 'form-control' }), 'alternate_contact': forms.TextInput( attrs={ 'placeholder': 'Enter Alternate Contact No.', 'id': 'form-acontact', 'class': 'form-control' }), }
class formPerfil(ModelForm): fechaNacimiento = forms.DateField( required=False, label='Fecha de nacimiento', widget=SelectDateWidget(years=YearNacimiento)) class Meta: model = Perfil fields = ('direccion', 'direccionNumero', 'ciudad', 'provincia', 'pais', 'fechaNacimiento') labels = { 'direccion': 'Dirección', 'direccionNumero': 'Número', 'ciudad': 'Ciudad', 'provincia': 'Provincia', 'pais': 'Pais' }
class UploadDocumentForm(forms.ModelForm): class Meta: model = Document fields = ('title', 'year', 'published', 'type', 'doc_file') # TODO get year from request published = forms.DateField(widget=SelectDateWidget(years=[]), label='Dato') def __init__(self, **kwargs): year = kwargs.pop('year') initial = copy.deepcopy(kwargs.pop('initial', {})) initial.setdefault('year', year) initial.setdefault('published', datetime.date.today()) kwargs['initial'] = initial super(UploadDocumentForm, self).__init__(**kwargs) self.fields['published'].widget.years = range(1970, year + 1)
def __init__(self, *args, **kwargs): super(UserProfileForm, self).__init__(*args, **kwargs) # Set the initial values for the user model fields based on those # corresponding values. Note that editing a user profile only makes # sense if an instance is provided, as every user will have a user # profile. self.fields['username'].initial = self.instance.user.username self.fields['first_name'].initial = self.instance.user.first_name self.fields['last_name'].initial = self.instance.user.last_name self.fields['email'].initial = self.instance.user.email student_org_user_profile = self.instance.get_student_org_user_profile() if student_org_user_profile: self.fields['bio'].initial = student_org_user_profile.bio # Set initial values for college student info college_student_info = self.instance.get_college_student_info() if college_student_info: self.fields['major'].initial = college_student_info.major.all() self.fields['start_term'].initial = \ college_student_info.start_term self.fields['grad_term'].initial = college_student_info.grad_term # Disable editing for user account fields (besides email): self.fields['username'].widget.attrs['disabled'] = 'disabled' self.fields['first_name'].widget.attrs['disabled'] = 'disabled' self.fields['last_name'].widget.attrs['disabled'] = 'disabled' # TODO(sjdemartini): Add clarifying help_text regarding forwarding email # to the "email" field here, as it will affect the forwarding email # address once LDAP modification is enabled in the save() method. # Change the range of dates shown for the birthday field to only # relevant times year_max = timezone.now().year - 10 year_min = year_max - 70 self.fields['birthday'].widget = SelectDateWidget( years=range(year_min, year_max)) # Make the local address required for someone editing their user # profile: self.fields['local_address1'].required = True self.fields['local_city'].required = True self.fields['local_state'].required = True self.fields['local_zip'].required = True
class Meta: model = Project fields = ('name', 'description', 'expiration_date', 'number_of_users_required', 'opensource', 'url') widgets = { 'name': Textarea(attrs={ 'rows': 2, 'cols': 50 }), 'description': TinyMCE(mce_attrs={'theme': "advanced"}), 'expiration_date': SelectDateWidget(), 'number_of_users_required': NumberInput(attrs={'style': 'text-align:right'}), 'url': TextInput(attrs={'size': 54}), }
class PersonForm(forms.Form): ''' 表单类 ''' CHOICE = ( ('man', '男'), ('woman', '女'), ('gay', '基'), ) YEARS = reversed(range(1990, 2000)) Boolean = forms.BooleanField(required=False) Char = forms.CharField(widget=forms.PasswordInput()) Choice = forms.ChoiceField(choices=CHOICE) Date = forms.DateField(widget=SelectDateWidget(years=YEARS, )) DateTime = forms.DateTimeField() Email = forms.EmailField() Float = forms.FloatField() Integer = forms.IntegerField() IP = forms.GenericIPAddressField()
class ActionForm(forms.ModelForm, FormMixin): def save(self, commit=True): newo = super(ActionForm, self).save(commit=commit) if newo.created_dt == None: newo.created_dt = datetime.datetime.now() newo.modified_dt = datetime.datetime.now() return newo class Meta: model = Action exclude = ('parent_pk', 'parent_type', 'user', 'child', 'children', 'permission_req', 'created_dt', 'modified_dt', 'deadline_dt') form_id = forms.CharField(widget=forms.HiddenInput(), initial="pp_event_form") summary = forms.CharField(max_length=100, widget=forms.TextInput(attrs={ 'size': '50', 'class': 'inputText' }), label="Summary of Action") description = forms.CharField(widget=MarkItUpWidget(), label="Call to Action Instructions") location = forms.CharField(label="City/State/Country Location", max_length=100, widget=forms.TextInput(attrs={ 'size': '50', 'class': 'inputText' }), required=False) date = forms.DateField(widget=SelectDateWidget(), required=False, label="Date") time_start = forms.TimeField(widget=SelectTimeWidget(), required=False, label="Time Start") time_end = forms.TimeField(widget=SelectTimeWidget(), required=False, label="Time End")
class UserForm(forms.ModelForm): password = forms.CharField( label=_('Password'), required=True, widget=forms.PasswordInput(attrs={'class': 'form-control'})) username = forms.CharField( label=_('User Name'), required=True, widget=forms.TextInput(attrs={'class': 'form-control'})) email = forms.EmailField( label=_('Email'), required=False, widget=forms.TextInput(attrs={'class': 'form-control'})) date_of_birth = forms.DateField(widget=SelectDateWidget( empty_label=("Choose Year", "Choose Month", "Choose Day"))) class Meta: model = MyUser fields = [ 'username', 'email', 'password', 'phone', 'avatar', 'date_of_birth' ]
class PatientProfileForm(forms.Form): fName = forms.CharField(label='First Name', required=False) lName = forms.CharField(label='Last Name', required=False) email = forms.EmailField(label='Email', required=False) currHospital = forms.CharField(label='Current Hospital', required=False) hLabels = { ('Rochester General Hospital', 'Rochester General Hospital'), ('Rochester Private Hospital', 'Rochester Private Hospital'), ('Cleveland Clinic', 'Cleveland Clinic'), ('University of Pittsburgh Medical Center', 'University of Pittsburgh Medical Center'), ('UCLA Medical Center', 'UCLA Medical Center') } # the currHospital cannot be changed from these forms, so we only include hospital preference prefHospital = forms.ChoiceField(label='Preferred Hospital', choices=hLabels, initial='Rochester General Hospital', required=True) height = forms.IntegerField(label='Height', initial=0, min_value=0, required=True) weight = forms.IntegerField(label='Weight', initial=0, min_value=0, required=True) gLabels = { ('Male', 'Male'), ('Female', 'Female'), } gender = forms.ChoiceField(label='Gender', choices=gLabels, initial='Male', widget=forms.Select(attrs={'class': 'smallDrop'}), required=True) birthday = forms.DateField(label='Birthday', initial='1990-01-01', required=True, widget=SelectDateWidget(attrs={'class': 'smallDrop'}, years=range(2016, 1900, -1))) bLabels = { ('A', 'A'), ('B', 'B'), ('AB', 'AB'), ('O', 'O'), } bloodtype = forms.ChoiceField(label='Blood Type', choices=bLabels, initial='A', widget=forms.Select(attrs={'class': 'smallDrop'}), required=True) eName = forms.CharField(label='Emergency Contact Name', required=True) ePhone = forms.CharField(label='Emergency Contact Phone Number', required=True)
class Meta: model = posting exclude = ['post_id', 'post_date', 'status'] #description = forms.CharField( widget=forms.TextArea) #finish_date = forms.DateField(widget=forms.SelectDateWidget()) widgets = { 'finish_date': SelectDateWidget(attrs={'style': 'width:10.5%'}), 'description': forms.Textarea(attrs={ 'placeholder': 'Job Description', 'cols': 50, 'rows': 10 }), 'post_title': forms.Textarea(attrs={ 'cols': 50, 'rows': 1 }), 'company_name': forms.Textarea(attrs={ 'cols': 50, 'rows': 1 }), 'total_pay': forms.NumberInput(attrs={ 'step': 100, 'style': 'width:50ch' }), #'percent_up_front': forms.NumberInput(attrs={'step': 5, 'style': 'width:50ch'}), 'tags': forms.SelectMultiple(attrs={'style': 'width:50ch'}) #'tags': CheckboxSelectMultiple() } labels = {"description": _("Job Description")} help_texts = {'description': _("geeeererrrerr")}
class CareRegistrationForm(forms.ModelForm): first_name = forms.CharField(label=__("Prénom"), ) last_name = forms.CharField(label=__("Nom de famille"), ) password1 = forms.CharField(widget=forms.PasswordInput, label=__("Mot de passe")) password2 = forms.CharField(widget=forms.PasswordInput, label=__("Mot de passe (à nouveau)")) birth_date = forms.DateField(label=__("Date de naissance"), widget=SelectDateWidget(years=range(datetime.date.today().year-100, \ datetime.date.today().year)), initial=datetime.date.today()) id = forms.IntegerField(widget=forms.HiddenInput) user_type = forms.ChoiceField(label=__("Type de compte"), choices=MemberType.MEMBER_TYPES[:-1]) class Meta: model = User fields = ['username', 'first_name', 'last_name', 'email', 'password1', 'password2', \ 'how_found', 'birth_date', 'phone_number', 'mobile_number', 'user_type'] def clean_username(self): # Since User.username is unique, this check is redundant, # but it sets a nicer error message than the ORM. See #13147. UserModel = self._meta.model username = self.cleaned_data["username"].lower() try: UserModel.objects.get(username=username) except UserModel.DoesNotExist: return username raise forms.ValidationError( _("Cet utilisateur existe déjà dans notre système. Veuillez utiliser utiliser le formulaire 'Mot de passe perdu' si vous êtes déjà enregistré." )) def clean(self): """ Verifiy that the values entered into the two password fields match. Note that an error here will end up in ``non_field_errors()`` because it doesn't apply to a single field. """ cleaned_data = super(CareRegistrationForm, self).clean() if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data: if self.cleaned_data['password1'] != self.cleaned_data['password2']: raise forms.ValidationError( _("Les mots de passe ne sont pas identiques.")) id = self.cleaned_data.get('id') id_user_type = self.cleaned_data.get('user_type') # si c'est un user de type membre verifier qu'il a une branche # sinon ne rien faire if int(id_user_type) == MemberType.MEMBER: try: Branch.objects.get(pk=id) except Branch.DoesNotExist: raise forms.ValidationError( _("Veuillez choisir une branche en choisissant un marqueur rouge sur la carte" )) if id == -1: raise forms.ValidationError( _("Veuillez choisir une branche en choisissant un marqueur rouge sur la carte" )) return self.cleaned_data
def test_selectdate_empty_label(self): w = SelectDateWidget(years=('2014', ), empty_label='empty_label') # Rendering the default state with empty_label setted as string. self.assertInHTML('<option value="0">empty_label</option>', w.render('mydate', ''), count=3) w = SelectDateWidget(years=('2014', ), empty_label=('empty_year', 'empty_month', 'empty_day')) # Rendering the default state with empty_label tuple. self.assertHTMLEqual( w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month"> <option value="0">empty_month</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">empty_day</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">empty_year</option> <option value="2014">2014</option> </select>""") self.assertRaisesMessage( ValueError, 'empty_label list/tuple must have 3 elements.', SelectDateWidget, years=('2014', ), empty_label=('not enough', 'values'))
def __init__(self, form, request, formentry_model=FormEntry, fieldentry_model=FieldEntry, *args, **kwargs): """ Iterate through the fields of the ``forms.models.Form`` instance and create the form fields required to control including the field in the export (with a checkbox) or filtering the field which differs across field types. User a list of checkboxes when a fixed set of choices can be chosen from, a pair of date fields for date ranges, and for all other types provide a textbox for text search. """ self.form = form self.request = request self.formentry_model = formentry_model self.fieldentry_model = fieldentry_model self.form_fields = form.fields.all() self.entry_time_name = str( self.formentry_model._meta.get_field("entry_time").verbose_name) super(EntriesForm, self).__init__(*args, **kwargs) for field in self.form_fields: field_key = "field_%s" % field.id # Checkbox for including in export. self.fields["%s_export" % field_key] = forms.BooleanField( label=field.label, initial=True, required=False) if field.is_a(*fields.CHOICES): # A fixed set of choices to filter by. if field.is_a(fields.CHECKBOX): choices = ((True, _("Checked")), (False, _("Not checked"))) else: choices = field.get_choices() contains_field = forms.MultipleChoiceField( label=" ", choices=choices, widget=forms.CheckboxSelectMultiple(), required=False) self.fields["%s_filter" % field_key] = choice_filter_field self.fields["%s_contains" % field_key] = contains_field elif field.is_a(*fields.MULTIPLE): # A fixed set of choices to filter by, with multiple # possible values in the entry field. contains_field = forms.MultipleChoiceField( label=" ", choices=field.get_choices(), widget=forms.CheckboxSelectMultiple(), required=False) self.fields["%s_filter" % field_key] = multiple_filter_field self.fields["%s_contains" % field_key] = contains_field elif field.is_a(*fields.DATES): # A date range to filter by. self.fields["%s_filter" % field_key] = date_filter_field self.fields["%s_from" % field_key] = forms.DateField( label=" ", widget=SelectDateWidget(), required=False) self.fields["%s_to" % field_key] = forms.DateField( label=_("and"), widget=SelectDateWidget(), required=False) else: # Text box for search term to filter by. contains_field = forms.CharField(label=" ", required=False) self.fields["%s_filter" % field_key] = text_filter_field self.fields["%s_contains" % field_key] = contains_field # Add ``FormEntry.entry_time`` as a field. field_key = "field_0" label = self.formentry_model._meta.get_field("entry_time").verbose_name self.fields["%s_export" % field_key] = forms.BooleanField( initial=True, label=label, required=False) self.fields["%s_filter" % field_key] = date_filter_field self.fields["%s_from" % field_key] = forms.DateField( label=" ", widget=SelectDateWidget(), required=False) self.fields["%s_to" % field_key] = forms.DateField( label=_("and"), widget=SelectDateWidget(), required=False)
def test_selectdate(self): w = SelectDateWidget(years=('2007','2008','2009','2010','2011','2012','2013','2014','2015','2016')) self.assertEqual(w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") self.assertEqual(w.render('mydate', None), w.render('mydate', '')) self.assertEqual(w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month"> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4" selected="selected">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15" selected="selected">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") # Accepts a datetime or a string: self.assertEqual(w.render('mydate', datetime.date(2010, 4, 15)), w.render('mydate', '2010-04-15')) # Invalid dates still render the failed date: self.assertEqual(w.render('mydate', '2010-02-31'), """<select name="mydate_month" id="id_mydate_month"> <option value="1">January</option> <option value="2" selected="selected">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31" selected="selected">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") # Using a SelectDateWidget in a form: w = SelectDateWidget(years=('2007','2008','2009','2010','2011','2012','2013','2014','2015','2016'), required=False) self.assertEqual(w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") self.assertEqual(w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4" selected="selected">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15" selected="selected">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") class GetDate(Form): mydate = DateField(widget=SelectDateWidget) a = GetDate({'mydate_month':'4', 'mydate_day':'1', 'mydate_year':'2008'}) self.assertTrue(a.is_valid()) self.assertEqual(a.cleaned_data['mydate'], datetime.date(2008, 4, 1)) # As with any widget that implements get_value_from_datadict, # we must be prepared to accept the input from the "as_hidden" # rendering as well. self.assertEqual(a['mydate'].as_hidden(), '<input type="hidden" name="mydate" value="2008-4-1" id="id_mydate" />') b = GetDate({'mydate':'2008-4-1'}) self.assertTrue(b.is_valid()) self.assertEqual(b.cleaned_data['mydate'], datetime.date(2008, 4, 1))
def test_selectdate(self): w = SelectDateWidget(years=("2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016")) self.assertHTMLEqual( w.render("mydate", ""), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""", ) self.assertHTMLEqual(w.render("mydate", None), w.render("mydate", "")) self.assertHTMLEqual( w.render("mydate", "2010-04-15"), """<select name="mydate_month" id="id_mydate_month"> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4" selected="selected">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15" selected="selected">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""", ) # Accepts a datetime or a string: self.assertHTMLEqual(w.render("mydate", datetime.date(2010, 4, 15)), w.render("mydate", "2010-04-15")) # Invalid dates still render the failed date: self.assertHTMLEqual( w.render("mydate", "2010-02-31"), """<select name="mydate_month" id="id_mydate_month"> <option value="1">January</option> <option value="2" selected="selected">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31" selected="selected">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""", ) # Using a SelectDateWidget in a form: w = SelectDateWidget( years=("2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016"), required=False ) self.assertHTMLEqual( w.render("mydate", ""), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""", ) self.assertHTMLEqual( w.render("mydate", "2010-04-15"), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4" selected="selected">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15" selected="selected">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""", ) a = GetDate({"mydate_month": "4", "mydate_day": "1", "mydate_year": "2008"}) self.assertTrue(a.is_valid()) self.assertEqual(a.cleaned_data["mydate"], datetime.date(2008, 4, 1)) # As with any widget that implements get_value_from_datadict, # we must be prepared to accept the input from the "as_hidden" # rendering as well. self.assertHTMLEqual( a["mydate"].as_hidden(), '<input type="hidden" name="mydate" value="2008-4-1" id="id_mydate" />' ) b = GetDate({"mydate": "2008-4-1"}) self.assertTrue(b.is_valid()) self.assertEqual(b.cleaned_data["mydate"], datetime.date(2008, 4, 1)) # Invalid dates shouldn't be allowed c = GetDate({"mydate_month": "2", "mydate_day": "31", "mydate_year": "2010"}) self.assertFalse(c.is_valid()) self.assertEqual(c.errors, {"mydate": ["Enter a valid date."]}) # label tag is correctly associated with month dropdown d = GetDate({"mydate_month": "1", "mydate_day": "1", "mydate_year": "2010"}) self.assertTrue('<label for="id_mydate_month">' in d.as_p())
class GiornataForm(Form): data = DateField(widget=SelectDateWidget())
class NewSubmissionForm(forms.Form): """ Form for submitting an ETD. """ document_file = forms.FileField( label="Main PDF File", required=True, allow_empty_file=False, validators=[MimetypeValidator(('application/pdf'))], help_text="Upload a PDF version of your thesis or dissertation. " "Please take care to ensure that any custom fonts are properly " "embedded and that your PDF displays correctly on different devices " "before submitting." ) supplemental_file = forms.FileField( label="Supplemental Data", required=settings.SUBMISSION_FORM_FIELDS['supplemental_file']['required'], allow_empty_file=False, validators=[MimetypeValidator(('application/zip'))], help_text="Upload a ZIP file containing any supplemental " "files you wish to deposit along with your thesis or dissertation." ) license_file = forms.FileField( label="License Agreement", required=settings.SUBMISSION_FORM_FIELDS['license_file']['required'], allow_empty_file=False, validators=[MimetypeValidator(('application/pdf'))], help_text="Upload a signed copy of a copyright license " "agreement, as per the policy of your institution." ) title = forms.CharField( label="Title", required=settings.SUBMISSION_FORM_FIELDS['title']['required'], help_text="Title of your thesis or dissertation" ) author = forms.CharField( label="Author", required=settings.SUBMISSION_FORM_FIELDS['author']['required'], help_text="Name of the author of this work as it appears on your title page" ) subject = forms.CharField( label="Subject(s)", required=settings.SUBMISSION_FORM_FIELDS['subject']['required'], help_text="Any topics or subjects as they appear on your title page, separated with commas" ) date = forms.DateField( label="Date", required=settings.SUBMISSION_FORM_FIELDS['date']['required'], widget=SelectDateWidget(years=range(2010, 2030)), help_text="Date of publication as it appears on your title page" ) abstract = forms.CharField( label="Abstract", required=settings.SUBMISSION_FORM_FIELDS['abstract']['required'], widget=forms.Textarea, help_text="Abstract of your thesis or dissertation" ) agreement = forms.BooleanField( label="I agree to the terms.", required=True ) # TODO: Custom validation that PDF is really a PDF, etc... def is_valid(self): valid = super(forms.Form, self).is_valid() return valid def save(self, author): """ Saves the submission, taking care of BagIt creation and any other necessary ingest behavior. author is the User who submitted the request. return value is the name of the bag directory created, or None. """ # Generate a submission ID. Must be unique. datestamp = datetime.now().strftime("%Y%m%d-%H%M%S") etd_id = "%s-%s" % (datestamp, author.username) # Set up staging directory for this bag (e.g. "STAGING_20140326-160532_lbroglie") staging_name = "STAGING_%s" % etd_id staging_path = os.path.abspath(os.path.join(settings.ETD_STORAGE_DIRECTORY, staging_name)) try: # Create the staging directory os.makedirs(staging_path) # Move the main document to the staging area document_path = os.path.join(staging_path, "etd.pdf") with open(document_path, 'wb+') as destination: for chunk in self.cleaned_data['document_file']: destination.write(chunk) # Perform a virus scan on the staged file if CLAMD: clam_daemon = pyclamd.ClamdAgnostic() result = clam_daemon.scan_file(document_path) if result is not None: logger.debug("Virus detected in file %s" % document_path) raise ScanException("Error: Virus detected in uploaded ETD file") # Move the license document to the staging area, if provided if self.cleaned_data['license_file']: document_path = os.path.join(staging_path, "license.pdf") with open(document_path, 'wb+') as destination: for chunk in self.cleaned_data['license_file']: destination.write(chunk) # Try to process the supplemental file as a ZipFile, if provided if self.cleaned_data['supplemental_file']: supplemental_path = os.path.join(staging_path, "supplemental") supplemental_zip = zipfile.ZipFile(self.cleaned_data['supplemental_file'], 'r') supplemental_zip.extractall(supplemental_path) supplemental_zip.close() # Create a dict representing all the form data form_record = { 'document_file': { 'original_filename': self.cleaned_data['document_file'].name, 'size': self.cleaned_data['document_file'].size, 'content_type': self.cleaned_data['document_file'].content_type }, } for name in ('title', 'author', 'subject', 'date', 'abstract'): if self.cleaned_data[name]: form_record[name] = str(self.cleaned_data[name]) if self.cleaned_data['supplemental_file']: form_record['supplemental_file'] = { 'original_filename': self.cleaned_data['supplemental_file'].name, 'size': self.cleaned_data['supplemental_file'].size, 'content_type': self.cleaned_data['supplemental_file'].content_type } if self.cleaned_data['license_file']: form_record['license_file'] = { 'original_filename': self.cleaned_data['license_file'].name, 'size': self.cleaned_data['license_file'].size, 'content_type': self.cleaned_data['license_file'].content_type } form_record_json_path = os.path.join(staging_path, "form.json") with open(form_record_json_path, 'w') as form_record_file: json.dump(form_record, form_record_file, skipkeys=True, indent=2 ) form_record_xml_path = os.path.join(staging_path, "form.xml") with open(form_record_xml_path, 'w') as form_record_file: xml_string = parseString(dicttoxml(form_record)).toprettyxml() form_record_file.write(xml_string) # Turn the staging directory into a bag bag_info = {} if self.cleaned_data['title']: bag_info['Internal-Sender-Identifier'] = self.cleaned_data['title'].replace('\n', ' ').replace('\r', '') bagit.make_bag(staging_path, bag_info) # Remove "STAGING_" from the name of the directory to signify completion final_path = os.path.abspath(os.path.join(settings.ETD_STORAGE_DIRECTORY, etd_id)) os.rename(staging_path, final_path) # Perform optional DAITSS Format Description Service metadata generation try: description_url = getattr(settings, 'DESCRIPTION_SERVICE_URL', None) if description_url: bag_describe(description_url, final_path) except Exception as e: # Log this failure of the description service # TODO if settings.DEBUG: raise e # Fire any emails/notifications/webhooks the institution wants to receive try: recipients = getattr(settings, 'SUBMISSION_EMAIL_RECIPIENTS', None) if recipients: subject = "[ETD Drop] New ETD submission" body = render_to_string( 'etd_drop_app/email_staff_submission.txt', { 'submission_time': datestamp, 'username': author.username, 'identifier': etd_id, } ) sender = settings.SUBMISSION_EMAIL_FROM_ADDRESS send_mail(subject, body, sender, recipients) except Exception as e: # Log this email failure # TODO if settings.DEBUG: raise e # Return the id to signify success to the caller return etd_id except Exception as e: # Log this event # TODO # Clean up the staging directory if it exists if os.path.isdir(staging_path): shutil.rmtree(staging_path) if settings.DEBUG: raise e return None
def test_l10n(self): w = SelectDateWidget(years=("2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016")) self.assertEqual( w.value_from_datadict({"date_year": "2010", "date_month": "8", "date_day": "13"}, {}, "date"), "13-08-2010" ) self.assertHTMLEqual( w.render("date", "13-08-2010"), """<select name="date_day" id="id_date_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13" selected="selected">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="date_month" id="id_date_month"> <option value="0">---</option> <option value="1">januari</option> <option value="2">februari</option> <option value="3">maart</option> <option value="4">april</option> <option value="5">mei</option> <option value="6">juni</option> <option value="7">juli</option> <option value="8" selected="selected">augustus</option> <option value="9">september</option> <option value="10">oktober</option> <option value="11">november</option> <option value="12">december</option> </select> <select name="date_year" id="id_date_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""", ) # Years before 1900 work w = SelectDateWidget(years=("1899",)) self.assertEqual( w.value_from_datadict({"date_year": "1899", "date_month": "8", "date_day": "13"}, {}, "date"), "13-08-1899" )
class ModuloStoricoTurni(forms.Form): anni = (2000, ) anno = forms.DateField(widget=SelectDateWidget(years=anni))
def test_selectdate_empty_label(self): w = SelectDateWidget(years=('2014',), empty_label='empty_label') # Rendering the default state with empty_label setted as string. self.assertInHTML('<option value="0">empty_label</option>', w.render('mydate', ''), count=3) w = SelectDateWidget(years=('2014',), empty_label=('empty_year', 'empty_month', 'empty_day')) # Rendering the default state with empty_label tuple. self.assertHTMLEqual(w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month"> <option value="0">empty_month</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">empty_day</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">empty_year</option> <option value="2014">2014</option> </select>""") self.assertRaisesMessage(ValueError, 'empty_label list/tuple must have 3 elements.', SelectDateWidget, years=('2014',), empty_label=('not enough', 'values'))
def test_selectdate(self): w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016')) self.assertHTMLEqual( w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") self.assertHTMLEqual(w.render('mydate', None), w.render('mydate', '')) self.assertHTMLEqual( w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month"> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4" selected="selected">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15" selected="selected">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") # Accepts a datetime or a string: self.assertHTMLEqual(w.render('mydate', datetime.date(2010, 4, 15)), w.render('mydate', '2010-04-15')) # Invalid dates still render the failed date: self.assertHTMLEqual( w.render('mydate', '2010-02-31'), """<select name="mydate_month" id="id_mydate_month"> <option value="1">January</option> <option value="2" selected="selected">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31" selected="selected">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") # Using a SelectDateWidget in a form: w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016'), required=False) self.assertHTMLEqual( w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") self.assertHTMLEqual( w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4" selected="selected">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15" selected="selected">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") a = GetDate({ 'mydate_month': '4', 'mydate_day': '1', 'mydate_year': '2008' }) self.assertTrue(a.is_valid()) self.assertEqual(a.cleaned_data['mydate'], datetime.date(2008, 4, 1)) # As with any widget that implements get_value_from_datadict, # we must be prepared to accept the input from the "as_hidden" # rendering as well. self.assertHTMLEqual( a['mydate'].as_hidden(), '<input type="hidden" name="mydate" value="2008-4-1" id="id_mydate" />' ) b = GetDate({'mydate': '2008-4-1'}) self.assertTrue(b.is_valid()) self.assertEqual(b.cleaned_data['mydate'], datetime.date(2008, 4, 1)) # Invalid dates shouldn't be allowed c = GetDate({ 'mydate_month': '2', 'mydate_day': '31', 'mydate_year': '2010' }) self.assertFalse(c.is_valid()) self.assertEqual(c.errors, {'mydate': ['Enter a valid date.']}) # label tag is correctly associated with month dropdown d = GetDate({ 'mydate_month': '1', 'mydate_day': '1', 'mydate_year': '2010' }) self.assertTrue('<label for="id_mydate_month">' in d.as_p())
def get_form_class_for_statistic(stat): form_fields = OrderedDict() field_count = 0 clean_checks = [] if stat.is_kvlist(): form_fields["label"] = forms.CharField(required=True, max_length=120) field_count += 1 elif stat.use_datekey(): form_fields["date"] = forms.DateField(required=False, widget=SelectDateWidget(years=range(2000, datetime.date.today().year+5))) field_count += 1 def clean_check_date(self, data): if not data["DELETE"]: if not data["date"]: self.add_error("date", "This field is required") return data clean_checks.append(clean_check_date) elif stat.use_datetimekey(): form_fields["datetime"] = forms.DateTimeField(required=False, widget=SelectDateTimeWidget) field_count += 1 if stat.use_datetimekey_level(): form_fields["level"] = forms.ChoiceField(required=True, choices=StatisticListItem.level_choices) field_count += 1 def clean_check_datetime(self, data): if not data["DELETE"]: if not data["datetime"]: self.add_error("datetime", "This field is required") return data clean_checks.append(clean_check_datetime) elif not stat.name_as_label: form_fields["label"] = forms.CharField(required=True, max_length=80) field_count += 1 if stat.is_numeric(): if stat.num_precision == 0: form_fields["value"] = forms.IntegerField(required=True) else: form_fields["value"] = forms.DecimalField(required=True, decimal_places=stat.num_precision) elif stat.stat_type == stat.AM_PM: form_fields["value"] = forms.ChoiceField(required=True, choices = ( ("am", "am"), ("pm", "pm") ) ) elif stat.stat_type != stat.NULL_STAT: form_fields["value"] = forms.CharField(max_length=400, required=True) field_count += 1 if stat.traffic_light_scale: form_fields["traffic_light_code"] = forms.ChoiceField( choices = stat.traffic_light_scale.choices(allow_null=True)) form_fields["clean_traffic_light_code"] = clean_traffic_light_code field_count += 1 if stat.icon_library: form_fields["icon_code"] = forms.ChoiceField( choices = stat.icon_library.choices(allow_null=True)) form_fields["clean_icon_code"] = clean_icon_code field_count += 1 if stat.trend: form_fields["trend"] = forms.ChoiceField(required=True, choices = ( ("1", "Upwards"), ("0", "Steady"), ("-1", "Downwards"), )) field_count += 1 if stat.is_data_list(): if stat.hyperlinkable: form_fields["url"] = forms.URLField(required=False) form_fields["sort_order"] = forms.IntegerField(required=True) field_count += 1 form_fields["field_count"] = field_count form_fields["clean"] = clean form_fields["clean_checks"] = clean_checks return type(str("Stat_%s_Form" % stat.name), (forms.Form,), form_fields)
def test_selectdate(self): w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016')) # Rendering the default state. self.assertHTMLEqual(w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") # Rendering the None or '' values should yield the same output. self.assertHTMLEqual(w.render('mydate', None), w.render('mydate', '')) # Rendering a string value. self.assertHTMLEqual(w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month"> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4" selected="selected">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15" selected="selected">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") # Rendering a datetime value. self.assertHTMLEqual(w.render('mydate', datetime.date(2010, 4, 15)), w.render('mydate', '2010-04-15')) # Invalid dates should still render the failed date. self.assertHTMLEqual(w.render('mydate', '2010-02-31'), """<select name="mydate_month" id="id_mydate_month"> <option value="1">January</option> <option value="2" selected="selected">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31" selected="selected">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") # Rendering with a custom months dict. w = SelectDateWidget(months=MONTHS_AP, years=('2013',)) self.assertHTMLEqual(w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">Jan.</option> <option value="2">Feb.</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">Aug.</option> <option value="9">Sept.</option> <option value="10">Oct.</option> <option value="11">Nov.</option> <option value="12">Dec.</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2013">2013</option> </select>""") # Using a SelectDateWidget in a form. w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016'), required=False) self.assertHTMLEqual(w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") self.assertHTMLEqual(w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4" selected="selected">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15" selected="selected">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") a = GetDate({'mydate_month': '4', 'mydate_day': '1', 'mydate_year': '2008'}) self.assertTrue(a.is_valid()) self.assertEqual(a.cleaned_data['mydate'], datetime.date(2008, 4, 1)) # As with any widget that implements get_value_from_datadict, # we must be prepared to accept the input from the "as_hidden" # rendering as well. self.assertHTMLEqual(a['mydate'].as_hidden(), '<input type="hidden" name="mydate" value="2008-4-1" id="id_mydate" />') b = GetDate({'mydate': '2008-4-1'}) self.assertTrue(b.is_valid()) self.assertEqual(b.cleaned_data['mydate'], datetime.date(2008, 4, 1)) # Invalid dates shouldn't be allowed c = GetDate({'mydate_month': '2', 'mydate_day': '31', 'mydate_year': '2010'}) self.assertFalse(c.is_valid()) self.assertEqual(c.errors, {'mydate': ['Enter a valid date.']}) # label tag is correctly associated with month dropdown d = GetDate({'mydate_month': '1', 'mydate_day': '1', 'mydate_year': '2010'}) self.assertTrue('<label for="id_mydate_month">' in d.as_p())
def test_l10n(self): w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016'), required=False) self.assertEqual( w.value_from_datadict( { 'date_year': '2010', 'date_month': '8', 'date_day': '13' }, {}, 'date'), '13-08-2010') self.assertHTMLEqual( w.render('date', '13-08-2010'), """<select name="date_day" id="id_date_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13" selected="selected">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="date_month" id="id_date_month"> <option value="0">---</option> <option value="1">januari</option> <option value="2">februari</option> <option value="3">maart</option> <option value="4">april</option> <option value="5">mei</option> <option value="6">juni</option> <option value="7">juli</option> <option value="8" selected="selected">augustus</option> <option value="9">september</option> <option value="10">oktober</option> <option value="11">november</option> <option value="12">december</option> </select> <select name="date_year" id="id_date_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") # Years before 1900 work w = SelectDateWidget(years=('1899', )) self.assertEqual( w.value_from_datadict( { 'date_year': '1899', 'date_month': '8', 'date_day': '13' }, {}, 'date'), '13-08-1899')
class SignupForm(forms.ModelForm): email = forms.EmailField(label=_('Email Address'), max_length=75) password1 = forms.CharField(label=_('Password'), widget=forms.PasswordInput) password2 = forms.CharField( label=_('Confirm Password'), widget=forms.PasswordInput, help_text=_('Enter the same password as above')) first_name = forms.CharField(label=_('First Name'), max_length=30) last_name = forms.CharField(label=_('Last Name'), max_length=30) date_of_birth = forms.DateField( label='Date of Birth', widget=SelectDateWidget(empty_label=('Year', 'Month', 'Day'), years=range(timezone.now().year, timezone.now().year - 70, -1))) gender = forms.CharField(label='Gender', widget=forms.Select(choices=(('', ''), ) + Player.GENDER_CHOICES)) honeypot = forms.CharField( required=False, label=_('Honeypot'), help_text= _('If you enter anything in this field your form submission will be treated as spam' )) blank = forms.CharField( required=False, label=_('Blank'), help_text= _('If you enter anything in this field your form submission will be treated as spam' )) captcha = CaptchaField(label=_( 'To verify that you are a real person, please enter the letters you see in the image' )) class Meta: model = get_user_model() fields = ( 'email', 'first_name', 'last_name', ) def clean_email(self): email = self.cleaned_data['email'] try: get_user_model().objects.get(email=email) except get_user_model().DoesNotExist: return email raise forms.ValidationError( _('A user with that email already exists.')) def clean_password2(self): password1 = self.cleaned_data.get('password1', None) password2 = self.cleaned_data.get('password2', None) if not password1 == password2: raise forms.ValidationError( _('The two password fields did not match.')) return password2 def clean_honeypot(self): value = self.cleaned_data['honeypot'] if not value == '': print('honeypot!') raise forms.ValidationError(self.fields['honeypot'].label) return value def clean_blank(self): value = self.cleaned_data['blank'] if not value == '': print('blank!') raise forms.ValidationError(self.fields['blank'].label) return value def save(self, commit=True): user = super(SignupForm, self).save(commit=False) user.set_password(self.cleaned_data['password1']) if commit: user.save() return user
def test_l10n(self): w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016'), required=False) self.assertEqual(w.value_from_datadict({'date_year': '2010', 'date_month': '8', 'date_day': '13'}, {}, 'date'), '13-08-2010') self.assertHTMLEqual(w.render('date', '13-08-2010'), """<select name="date_day" id="id_date_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13" selected="selected">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="date_month" id="id_date_month"> <option value="0">---</option> <option value="1">januari</option> <option value="2">februari</option> <option value="3">maart</option> <option value="4">april</option> <option value="5">mei</option> <option value="6">juni</option> <option value="7">juli</option> <option value="8" selected="selected">augustus</option> <option value="9">september</option> <option value="10">oktober</option> <option value="11">november</option> <option value="12">december</option> </select> <select name="date_year" id="id_date_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") # Years before 1900 work w = SelectDateWidget(years=('1899',)) self.assertEqual(w.value_from_datadict({'date_year': '1899', 'date_month': '8', 'date_day': '13'}, {}, 'date'), '13-08-1899')
def __init__(self, form, request, *args, **kwargs): """ Iterate through the fields of the ``forms.models.Form`` instance and create the form fields required to control including the field in the export (with a checkbox) or filtering the field which differs across field types. User a list of checkboxes when a fixed set of choices can be chosen from, a pair of date fields for date ranges, and for all other types provide a textbox for text search. """ self.form = form self.request = request self.form_fields = sorted(list(CompanyProfile._meta.get_all_field_names())) super(EntriesForm, self).__init__(*args, **kwargs) for field in self.form_fields: field_key = "field_" + field # Checkbox for including in export. self.fields["%s_export" % field_key] = forms.BooleanField( label=field, initial=True, required=False) if field.strip("_") in CHOICES: # A fixed set of choices to filter by. choices = ((True, _("True")), (False, _("False"))) contains_field = forms.MultipleChoiceField(label=" ", choices=choices, widget=forms.CheckboxSelectMultiple(), required=False) self.fields["%s_filter" % field_key] = choice_filter_field self.fields["%s_contains" % field_key] = contains_field elif field.strip("_") in MULTIPLE: # A fixed set of choices to filter by, with multiple # possible values in the entry field. if field.strip("_") == "majors_wanted": c = MAJOR_CHOICES elif field.strip("_") == "days_attending": c = DAY_CHOICES elif field.strip("_") == "grade_;evel_wanted": c = GRADE_LEVEL_CHOICES else: c = GRADE_LEVEL_CHOICES contains_field = forms.MultipleChoiceField(label=" ", choices=c, widget=forms.CheckboxSelectMultiple(), required=False) self.fields["%s_filter" % field_key] = multiple_filter_field self.fields["%s_contains" % field_key] = contains_field elif field in DATES: # A date range to filter by. self.fields["%s_filter" % field_key] = date_filter_field self.fields["%s_from" % field_key] = forms.DateField( label=" ", widget=SelectDateWidget(), required=False) self.fields["%s_to" % field_key] = forms.DateField( label=_("and"), widget=SelectDateWidget(), required=False) else: # Text box for search term to filter by. contains_field = forms.CharField(label=" ", required=False) self.fields["%s_filter" % field_key] = text_filter_field self.fields["%s_contains" % field_key] = contains_field # Add ``FormEntry.entry_time`` as a field. field_key = "field_0" self.fields["%s_export" % field_key] = forms.BooleanField(initial=True, label=" ", required=False) self.fields["%s_filter" % field_key] = date_filter_field self.fields["%s_from" % field_key] = forms.DateField( label=" ", widget=SelectDateWidget(), required=False) self.fields["%s_to" % field_key] = forms.DateField( label=_("and"), widget=SelectDateWidget(), required=False)