class UploadForm(forms.Form): upload = forms.FileField()
class UploadForm(forms.Form): filename = forms.CharField(max_length=100) docfile = forms.FileField( label = 'Selecciona un archivo' )
class FooFileForm(forms.Form): foo_file = forms.FileField()
class SharedFileForm(forms.Form): minimum_validation = forms.IntegerField(label='Enter the minimum users required to unlock the file (at least 2)') file_field = forms.FileField(label='Select the file(s) you want to add',widget=forms.ClearableFileInput(attrs={'multiple': True}))
class PackageUploadForm(ProblemUploadForm): package_file = forms.FileField(label=_("Package file"))
class UploadFileForm(forms.Form): audio = forms.FileField()
class UploadFileForm(forms.Form): file = forms.FileField()
class SignUpForm(UserCreationForm): birth_date = forms.DateField( help_text='Required. Format: YYYY-MM-DD', widget=forms.TextInput(attrs={ 'placeholder': 'DOB', 'class': 'form-control', 'style': 'width:200px' })) gender = forms.ChoiceField( choices=GENDER, required=True, widget=forms.Select(attrs={ 'class': 'dropdown-item', 'style': 'width:200px' })) status = forms.ChoiceField( choices=STATUS, required=True, widget=forms.Select(attrs={ 'class': 'dropdown-item', 'style': 'width:200px' })) referal_id = forms.CharField( help_text= '(make sure you enter it right because this cannot be changed later)', required=False, widget=forms.TextInput( attrs={ 'placeholder': 'Referal_id', 'class': 'form-control', 'style': 'width:200px' })) pan_number = forms.IntegerField(required=True, max_value=9999999999, widget=forms.NumberInput( attrs={ 'placeholder': 'Pan Number', 'class': 'form-control', 'style': 'width:200px' })) address = forms.CharField(required=True, widget=forms.TextInput( attrs={ 'placeholder': 'Address', 'class': 'form-control', 'style': 'width:200px' })) city = forms.CharField( required=True, widget=forms.TextInput(attrs={ 'placeholder': 'City', 'class': 'form-control', 'style': 'width:200px' })) pincode = forms.IntegerField(required=True, max_value=999999, widget=forms.NumberInput( attrs={ 'placeholder': 'Pincode', 'class': 'form-control', 'style': 'width:200px' })) email = forms.EmailField(help_text='must be unique', required=True, widget=forms.EmailInput( attrs={ 'placeholder': 'E-Mail', 'class': 'form-control', 'style': 'width:200px' })) mobile_number = forms.IntegerField(help_text='must be unique', required=True, max_value=9999999999, widget=forms.NumberInput( attrs={ 'placeholder': 'Mobile Number', 'class': 'form-control', 'style': 'width:200px' })) state = forms.CharField(required=True, widget=forms.TextInput( attrs={ 'placeholder': 'State', 'class': 'form-control', 'style': 'width:200px' })) password1 = forms.CharField(widget=forms.PasswordInput( attrs={ 'placeholder': 'Password', 'class': 'form-control', 'style': 'width:200px' }), label="Password", required=True) password2 = forms.CharField(widget=forms.PasswordInput( attrs={ 'placeholder': 'Confirm Password', 'class': 'form-control', 'style': 'width:200px' }), label="Confirm Password", required=True) username = forms.CharField(widget=forms.TextInput( attrs={ 'placeholder': 'Username', 'class': 'form-control', 'style': 'width:200px' }), label="Username", required=True) first_name = forms.CharField(required=True, widget=forms.TextInput( attrs={ 'placeholder': 'First Name', 'class': 'form-control', 'style': 'width:200px' })) last_name = forms.CharField(required=False, widget=forms.TextInput( attrs={ 'placeholder': 'Last Name', 'class': 'form-control', 'style': 'width:200px' })) captcha = CaptchaField() profile_pic = forms.FileField(required=False) def clean_email(self): mail = self.cleaned_data['email'] try: match = User.objects.get(email__iexact=mail) except: return mail raise forms.ValidationError("Email already exists.") def clean_mobile_number(self): m_num = self.cleaned_data['mobile_number'] try: match = Profile.objects.get(mobile_number__iexact=m_num) except: return m_num raise forms.ValidationError('Mobile Number already exist...Try Again!') class Meta: model = User fields = ( 'referal_id', 'username', 'first_name', 'last_name', 'pan_number', 'gender', 'birth_date', 'status', 'address', 'city', 'pincode', 'state', 'mobile_number', 'email', 'profile_pic', 'password1', 'password2', 'captcha', )
class UploadMultipleFileForm(forms.Form): file = forms.FileField(widget=forms.ClearableFileInput( attrs={'multiple': True}))
class UploadFileForm(forms.Form): uploaded_file = forms.FileField( label='Select a file', )
class LabelUploadForm(forms.Form): file = forms.FileField() verify = forms.BooleanField(required=None)
class FirmApplicationClientForm(forms.ModelForm, AddressHelper): required_css_class = 'required' first_name = forms.CharField(label='First Name') middle_name = forms.CharField(label='Middle Name', required=False) last_name = forms.CharField(label='Last Name') email = forms.CharField(label='Email') tax_transcript = forms.FileField(label='Tax Transcript', required=False) social_security_statement = forms.FileField( label='Social Security Statement', required=False) address1 = forms.CharField(label='Address 1') address2 = forms.CharField(label='Address 2', required=False) city = forms.CharField(label='City') post_code = forms.CharField(label='Zip code', max_length=16, required=False) state = forms.CharField(label='State', max_length=128) country = forms.ChoiceField(label='Country', choices=COUNTRY_CHOICES) ssn = forms.CharField(label='Social Security Number', required=False) politically_exposed = forms.BooleanField(label='Politically Exposed', required=False) additional_document = forms.FileField(required=False) salutation = forms.CharField( label='Salutation', max_length=10, widget=forms.Select(choices=constants.IB_SALUTATION_CHOICES)) suffix = forms.CharField( label='Suffix', max_length=10, widget=forms.Select(choices=constants.IB_SUFFIX_CHOICES), required=False) email_to_client = forms.BooleanField(label='Client', required=False) email_to_advisor = forms.BooleanField(label='Advisor', required=False) class Meta: model = Client fields = [ 'first_name', 'middle_name', 'last_name', 'email', # User model 'tax_transcript', 'social_security_statement', # Invitation model 'address1', 'address2', 'city', 'post_code', 'state', 'country', # Address fields 'gender', 'civil_status', 'phone_num', 'date_of_birth', # Client model 'employer_type', 'employer', 'employment_status', 'income', 'other_income', 'industry_sector', 'occupation', # Client model - employement 'ssn', 'politically_exposed', # Client regional_data 'student_loan', 'student_loan_assistance_program', 'student_loan_graduate_looking', 'student_loan_parent_looking', 'hsa_eligible', 'hsa_provider_name', 'hsa_state', 'hsa_coverage_type', 'salutation', 'suffix', ] # IBOnboard def __init__(self, *args, **kwargs): super(FirmApplicationClientForm, self).__init__(*args, **kwargs) client = kwargs['instance'] user = client.user address = client.residential_address self.fields['first_name'].initial = user.first_name self.fields['middle_name'].initial = user.middle_name self.fields['last_name'].initial = user.last_name self.fields['email'].initial = user.email try: invitation = user.invitation self.fields['tax_transcript'].initial = invitation.tax_transcript self.fields[ 'social_security_statement'].initial = invitation.social_security_statement except: pass self.fields['address1'].initial = address.address1 self.fields['address2'].initial = address.address2 self.fields['city'].initial = address.city self.fields['post_code'].initial = address.post_code self.fields['state'].initial = address.region.code self.fields['country'].initial = address.region.country self.fields['ssn'].initial = client.regional_data[ 'ssn'] if 'ssn' in client.regional_data else '' self.fields['politically_exposed'].initial = client.regional_data[ 'politically_exposed'] try: ib_onboard = client.ib_onboard self.fields['salutation'].initial = ib_onboard.salutation self.fields['suffix'].initial = ib_onboard.suffix except: pass def clean(self): cleaned_data = super(FirmApplicationClientForm, self).clean() # employed_statuses = [EMPLOYMENT_STATUS_EMMPLOYED, EMPLOYMENT_STATUS_SELF_EMPLOYED] # print(cleaned_data['income']) # if cleaned_data['employment_status'] in employed_statuses and cleaned_data['income'] is None: # raise forms.ValidationError("Income field is required") if cleaned_data['country'] != 'US': del cleaned_data['ssn'] return cleaned_data def save(self, commit=True, *args, **kwargs): client = super(FirmApplicationClientForm, self).save(commit=False, *args, **kwargs) regional_data = client.regional_data if self.cleaned_data['country'] == 'US': regional_data['ssn'] = self.cleaned_data['ssn'] else: if 'ssn' in regional_data: del regional_data['ssn'] if 'tax_transcript' in regional_data: del regional_data['tax_transcript'] if 'tax_transcript_data' in regional_data: del regional_data['tax_transcript_data'] if 'tax_transcript_data_ex' in regional_data: del regional_data['tax_transcript_data_ex'] if 'social_security_statement' in regional_data: del regional_data['social_security_statement'] if 'social_security_statement_data' in regional_data: del regional_data['social_security_statement_data'] if 'partner_social_security_statement' in regional_data: del regional_data['partner_social_security_statement'] if 'partner_social_security_statement_data' in regional_data: del regional_data['partner_social_security_statement_data'] regional_data['politically_exposed'] = self.cleaned_data[ 'politically_exposed'] client.regional_data = regional_data client.residential_address = self.update_address( client.residential_address, '') if commit: client.save() user = client.user user.first_name = self.cleaned_data['first_name'] user.middle_name = self.cleaned_data['middle_name'] user.last_name = self.cleaned_data['last_name'] user.email = self.cleaned_data['email'] if commit: user.save() try: invitation = user.invitation invitation.tax_transcript = self.cleaned_data['tax_transcript'] invitation.social_security_statement = self.cleaned_data[ 'social_security_statement'] if commit: invitation.save() except ObjectDoesNotExist: pass try: ib_onboard = client.ib_onboard except ObjectDoesNotExist: ib_onboard = IBOnboard(client=client) ib_onboard.salutation = self.cleaned_data['salutation'] ib_onboard.suffix = self.cleaned_data['suffix'] if commit: ib_onboard.save() return client
class FileUpload(forms.Form): filetype = forms.ChoiceField(label='文件类型:csv,txt,xlsx', choices=zip('csv,txt,xlsx'.split(','), 'csv,txt,xlsx'.split(',')), required=False) file = forms.FileField(label='文件')
class MainForm(forms.Form): result_ranks = forms.FileField(label='File with Result Rankings') website_list = forms.FileField(label='List of Websites')
class Order_Form_For_Shadow(forms.Form): comment = forms.CharField(required=False) order = forms.FileField(required=False)
class UploadFileForm(forms.Form): folder = forms.CharField(max_length=1024) name = forms.CharField(max_length=1024) file = forms.FileField()
class NewPackagedAppForm(happyforms.Form): upload = forms.FileField() def __init__(self, *args, **kwargs): self.max_size = kwargs.pop('max_size', MAX_PACKAGED_APP_SIZE) self.user = kwargs.pop('user', get_user()) self.addon = kwargs.pop('addon', None) self.file_upload = None super(NewPackagedAppForm, self).__init__(*args, **kwargs) def clean_upload(self): upload = self.cleaned_data['upload'] errors = [] if upload.size > self.max_size: errors.append({ 'type': 'error', 'message': _('Packaged app too large for submission. Packages ' 'must be smaller than %s.' % filesizeformat( self.max_size)), 'tier': 1, }) # Immediately raise an error, do not process the rest of the view, # which would read the file. raise self.persist_errors(errors, upload) manifest = None try: # Be careful to keep this as in-memory zip reading. manifest = ZipFile(upload, 'r').read('manifest.webapp') except Exception as e: errors.append({ 'type': 'error', 'message': _('Error extracting manifest from zip file.'), 'tier': 1, }) origin = None if manifest: try: origin = WebAppParser.decode_manifest(manifest).get('origin') except forms.ValidationError as e: errors.append({ 'type': 'error', 'message': ''.join(e.messages), 'tier': 1, }) if origin: try: verify_app_domain(origin, packaged=True, exclude=self.addon) except forms.ValidationError, e: errors.append({ 'type': 'error', 'message': ''.join(e.messages), 'tier': 1, }) if errors: raise self.persist_errors(errors, upload) # Everything passed validation. self.file_upload = FileUpload.from_post( upload, upload.name, upload.size, is_webapp=True) self.file_upload.user = self.user self.file_upload.save()
class NewVideoForm(forms.Form): title = forms.CharField(label='Title', max_length=100) description = forms.CharField(label='Description', max_length=500) file = forms.FileField()
class CsvImportForm(forms.Form): csv_file = forms.FileField(widget=forms.FileInput( attrs={'accept': ".csv"}))
class CandidatesForm(forms.ModelForm): NIVEL_INGLES = (("Iniciante", "Iniciante"), ("Elementar", "Elementar"), ("Intermédio", "Intermédio"), ("Avançado", "Avançado")) BENEFICIA_P_EST = (("Sim", "Sim"), ("Não", "Não")) HABILITACOES_ACADEMICAS = ( ("Licenciatura Concluída", "Licenciatura concluída"), ("Frequência Universitária", "Frequência Universitária"), ("Ensino M. Concluído", "Ensino M. Concluído"), ) DISPONIBILIDADE = ( ("Tempo Inteiro", "Tempo Inteiro"), ("Tempo Parcial", "Tempo Parcial"), ) nome_completo = forms.CharField( label='Nome Completo', widget=forms.TextInput(attrs={'class': 'form-control'})) data_nascimento = forms.DateField( label='Data de Nascimento', widget=forms.DateInput(attrs={'class': 'form-control'})) natural_de = forms.CharField( label='Naturalidade', widget=forms.TextInput(attrs={'class': 'form-control'})) provincia = forms.CharField( label='Província', widget=forms.TextInput(attrs={'class': 'form-control'})) n_bilhete = forms.CharField( label='Número Bilhete', widget=forms.TextInput(attrs={'class': 'form-control'})) provincia_residencia = forms.CharField( label='Província Residência', widget=forms.TextInput(attrs={'class': 'form-control'})) telemovel_principal = forms.CharField( label='Telemóvel Principal', widget=forms.TextInput(attrs={'class': 'form-control'})) telemovel_alternativo = forms.CharField( label='Telemóvel Alternativo', widget=forms.TextInput(attrs={'class': 'form-control'})) email = forms.CharField( label='Email', widget=forms.EmailInput(attrs={'class': 'form-control'})) habilitacoes_academica = forms.ChoiceField( choices=HABILITACOES_ACADEMICAS, widget=forms.Select(attrs={'class': 'form-control'})) grau = forms.CharField( label='Grau', widget=forms.TextInput(attrs={'class': 'form-control'})) instituicao = forms.CharField( label='Instituição', widget=forms.TextInput(attrs={'class': 'form-control'})) curso = forms.CharField( label='Curso', widget=forms.TextInput(attrs={'class': 'form-control'})) ano_conclusao = forms.CharField( label='Ano de conclusão', widget=forms.TextInput(attrs={'class': 'form-control'})) media_final = forms.CharField( label='Média Final', widget=forms.TextInput(attrs={'class': 'form-control'})) area_candidatura = forms.CharField( label='Área de Candidatura', widget=forms.TextInput(attrs={'class': 'form-control'})) ano_experiencia_area = forms.CharField( label='Ano de Experiência na Área', widget=forms.TextInput(attrs={'class': 'form-control'})) empresas_onde_trabalhou = forms.CharField( label='Empresas onde Trabalhou', widget=forms.TextInput(attrs={'class': 'form-control'})) cargo_na_empresa = forms.CharField( label='Cargo na Empresa', widget=forms.TextInput(attrs={'class': 'form-control'})) disponibilidade = forms.ChoiceField( choices=DISPONIBILIDADE, widget=forms.Select(attrs={'class': 'form-control'})) nivel_ingles = forms.ChoiceField( choices=NIVEL_INGLES, widget=forms.Select(attrs={'class': 'form-control'})) curriculum = forms.FileField() class Meta: model = Candidates fields = [ 'nome_completo', 'data_nascimento', 'natural_de', 'provincia', 'n_bilhete', 'provincia_residencia', 'telemovel_principal', 'telemovel_alternativo', 'email', 'habilitacoes_academica', 'grau', 'instituicao', 'curso', 'ano_conclusao', 'media_final', 'area_candidatura', 'ano_experiencia_area', 'empresas_onde_trabalhou', 'cargo_na_empresa', 'disponibilidade', 'nivel_ingles', 'curriculum' ]
class BatchAddMembersForm(forms.Form): """ Form for importing group members from CSV file. """ file = forms.FileField()
class CandidatesViewForm(forms.ModelForm): nome_completo = forms.CharField( label='Nome Completo', widget=forms.TextInput(attrs={'class': 'form-control'})) data_nascimento = forms.DateField( label='Data de Nascimento', widget=forms.DateInput(attrs={'class': 'form-control'})) natural_de = forms.CharField( label='Naturalidade', widget=forms.TextInput(attrs={'class': 'form-control'})) provincia = forms.CharField( label='Província', widget=forms.TextInput(attrs={'class': 'form-control'})) n_bilhete = forms.CharField( label='Número Bilhete', widget=forms.TextInput(attrs={'class': 'form-control'})) provincia_residencia = forms.CharField( label='Província Residência', widget=forms.TextInput(attrs={'class': 'form-control'})) telemovel_principal = forms.CharField( label='Telemóvel Principal', widget=forms.TextInput(attrs={'class': 'form-control'})) telemovel_alternativo = forms.CharField( label='Telemóvel Alternativo', widget=forms.TextInput(attrs={'class': 'form-control'})) email = forms.CharField( label='Email', widget=forms.EmailInput(attrs={'class': 'form-control'})) habilitacoes_academica = forms.CharField( label='Habilitações Académica', widget=forms.TextInput(attrs={'class': 'form-control'})) grau = forms.CharField( label='Grau', widget=forms.TextInput(attrs={'class': 'form-control'})) instituicao = forms.CharField( label='Instituição', widget=forms.TextInput(attrs={'class': 'form-control'})) curso = forms.CharField( label='Curso', widget=forms.TextInput(attrs={'class': 'form-control'})) ano_conclusao = forms.CharField( label='Ano de conclusão', widget=forms.TextInput(attrs={'class': 'form-control'})) media_final = forms.CharField( label='Média Final', widget=forms.TextInput(attrs={'class': 'form-control'})) area_candidatura = forms.CharField( label='Área de Candidatura', widget=forms.TextInput(attrs={'class': 'form-control'})) ano_experiencia_area = forms.CharField( label='Ano de Experiência na Área', widget=forms.TextInput(attrs={'class': 'form-control'})) empresas_onde_trabalhou = forms.CharField( label='Empresas onde Trabalhou', widget=forms.TextInput(attrs={'class': 'form-control'})) cargo_na_empresa = forms.CharField( label='Cargo na Empresa', widget=forms.TextInput(attrs={'class': 'form-control'})) disponibilidade = forms.CharField( label='Sua Disponibililidade', widget=forms.TextInput(attrs={'class': 'form-control'})) nivel_ingles = forms.CharField( label='Nível Inglês', widget=forms.TextInput(attrs={'class': 'form-control'})) curriculum = forms.FileField() class Meta: model = Candidates fields = [ 'nome_completo', 'data_nascimento', 'natural_de', 'provincia', 'n_bilhete', 'provincia_residencia', 'telemovel_principal', 'telemovel_alternativo', 'email', 'habilitacoes_academica', 'grau', 'instituicao', 'curso', 'ano_conclusao', 'media_final', 'area_candidatura', 'ano_experiencia_area', 'empresas_onde_trabalhou', 'cargo_na_empresa', 'disponibilidade', 'nivel_ingles', 'curriculum' ]
class FileForm(forms.Form): file_field = forms.FileField(label='Select the file(s) you want to add',widget=forms.ClearableFileInput(attrs={'multiple': True}))
class ImportForm(forms.Form): def clean(self): # If there are validation errors earlier on, don't bother. if not ('address_file' in self.cleaned_data and 'ignore_errors' in self.cleaned_data and 'newsletter' in self.cleaned_data): return self.cleaned_data # TESTME: Should an error be raised here or not? # raise forms.ValidationError(_("No file has been specified.")) ignore_errors = self.cleaned_data['ignore_errors'] newsletter = self.cleaned_data['newsletter'] myfield = self.base_fields['address_file'] myvalue = myfield.widget.value_from_datadict( self.data, self.files, self.add_prefix('address_file')) content_type = myvalue.content_type allowed_types = ('text/plain', 'application/octet-stream', 'text/vcard', 'text/directory', 'text/x-vcard', 'application/vnd.ms-excel', 'text/comma-separated-values', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/anytext') if content_type not in allowed_types: raise forms.ValidationError(_( "File type '%s' was not recognized.") % content_type) self.addresses = [] ext = myvalue.name.rsplit('.', 1)[-1].lower() if ext == 'vcf': self.addresses = parse_vcard( myvalue.file, newsletter, ignore_errors) elif ext == 'ldif': self.addresses = parse_ldif( myvalue.file, newsletter, ignore_errors) elif ext == 'csv': self.addresses = parse_csv( myvalue.file, newsletter, ignore_errors) print(self.addresses) else: raise forms.ValidationError( _("File extention '%s' was not recognized.") % ext) if len(self.addresses) == 0: raise forms.ValidationError( _("No entries could found in this file.")) print('cleaned data') print(self.cleaned_data) return self.cleaned_data def get_addresses(self): if hasattr(self, 'addresses'): # print('el objeto tiene atributo addresses') logger.debug('Getting addresses: %s', self.addresses) # print(self.addresses) return self.addresses else: return {} newsletter = forms.ModelChoiceField( label=_("Newsletter"), queryset=Newsletter.objects.all(), initial=Newsletter.get_default_id()) address_file = forms.FileField(label=_("Address file")) ignore_errors = forms.BooleanField( label=_("Ignore non-fatal errors"), initial=True, required=False)
class UpdateFileForm(forms.Form) file = forms.FileField()
class RSSForm(forms.Form): def clean(self): pass # If there are validation errors earlier on, don't bother. if not ('address_file' in self.cleaned_data and 'ignore_errors' in self.cleaned_data and 'newsletter' in self.cleaned_data): return self.cleaned_data # TESTME: Should an error be raised here or not? # raise forms.ValidationError(_("No file has been specified.")) ignore_errors = self.cleaned_data['ignore_errors'] newsletter = self.cleaned_data['newsletter'] myfield = self.base_fields['address_file'] myvalue = myfield.widget.value_from_datadict( self.data, self.files, self.add_prefix('address_file')) content_type = myvalue.content_type #allowed_types = ('text/plain', 'application/octet-stream', # 'text/vcard', 'text/directory', 'text/x-vcard', # 'application/vnd.ms-excel', # 'text/comma-separated-values', 'text/csv', # 'application/csv', 'application/excel', # 'application/vnd.msexcel', 'text/anytext') # if content_type not in allowed_types: # raise forms.ValidationError(_( # "File type '%s' was not recognized.") % content_type) # # self.addresses = [] # # ext = myvalue.name.rsplit('.', 1)[-1].lower() # if ext == 'vcf': # self.addresses = parse_vcard( # myvalue.file, newsletter, ignore_errors) # # elif ext == 'ldif': # self.addresses = parse_ldif( # myvalue.file, newsletter, ignore_errors) # # elif ext == 'csv': # self.addresses = parse_csv( # myvalue.file, newsletter, ignore_errors) # print(self.addresses) # # else: # raise forms.ValidationError( # _("File extention '%s' was not recognized.") % ext) # # if len(self.addresses) == 0: # raise forms.ValidationError( # _("No entries could found in this file.")) # print(self.cleaned_data) return self.cleaned_data # def get_addresses(self): # if hasattr(self, 'addresses'): # # print('el objeto tiene atributo addresses') # logger.debug('Getting addresses: %s', self.addresses) # # print(self.addresses) # return self.addresses # else: # return {} newsletter = forms.ChoiceField( label=_("Sites"), choices=('CubaDebate', 'AIN'), initial='CubaDebate') address_file = forms.FileField(label=_("Address file")) ignore_errors = forms.BooleanField( label=_("Ignore non-fatal errors"), initial=True, required=False)
class DocumentForm(forms.Form): docfile = forms.FileField( label='Select a file' )
class Project_Form_For_Shadow(forms.Form): comment = forms.CharField(required=False) project = forms.FileField(required=False)
class UploadFileForm(forms.Form): # title = forms.CharField(max_length=50, empty_value='output') file = forms.FileField(widget=forms.FileInput( attrs={'onchange': 'previewImage(this)'}))
class CustomUserEditForm(UserEditForm): country = forms.CharField(required=True, label="Country") attachment = forms.FileField(required=True, label="Attachment")