示例#1
0
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')
示例#2
0
 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)),
     }
示例#3
0
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')
示例#4
0
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'
        ]
示例#5
0
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'}),
                   }
示例#6
0
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'
        ]
示例#7
0
文件: forms.py 项目: sinsticon/Practr
class MoreInfo(forms.ModelForm):
    dob = forms.DateField(widget=SelectDateWidget(years=DOY))

    class Meta:
        model = student
        fields = [
            'location',
            'degree',
            'college',
            'year',
            'dob',
        ]
示例#8
0
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'),
    )
示例#9
0
    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
示例#10
0
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'
                }),
        }
示例#11
0
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'
        }
示例#12
0
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)
示例#13
0
文件: forms.py 项目: ochan1/quark
    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
示例#14
0
 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}),
     }
示例#15
0
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()
示例#16
0
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")
示例#17
0
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'
        ]
示例#18
0
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)
示例#19
0
 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")}
示例#20
0
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
示例#21
0
    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'))
示例#22
0
 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)
示例#23
0
文件: extra.py 项目: Ryati/django
    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))
示例#24
0
    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())
示例#25
0
class GiornataForm(Form):
    data = DateField(widget=SelectDateWidget())
示例#26
0
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
示例#27
0
    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"
        )
示例#28
0
文件: forms.py 项目: bose1993/jorvik
class ModuloStoricoTurni(forms.Form):

    anni = (2000, )

    anno = forms.DateField(widget=SelectDateWidget(years=anni))
示例#29
0
    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'))
示例#30
0
    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())
示例#31
0
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)
示例#32
0
    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())
示例#33
0
    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')
示例#34
0
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
示例#35
0
    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')
示例#36
0
 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)