def __init__(self, *args, **kwargs): """ Dynamically create fields using the membership application chosen. The choices provided to these dynamic fields are the csv import columns. """ step_numeral, step_name = kwargs.pop('step', (None, None)) corp_app = kwargs.pop('corp_app', '') file_path = kwargs.pop('file_path', '') super(CSVForm, self).__init__(*args, **kwargs) if step_numeral == 1: """ Basic Form: Application & File Uploader """ self.fields['corp_app'] = forms.ModelChoiceField( label=_('Corp Application'), queryset=CorpApp.objects.all()) self.fields['update_option'] = forms.CharField( widget=forms.RadioSelect(choices=( ('skip', _('Skip')), ('update', _('Update Blank Fields')), ('override', _('Override All Fields')), )), initial='skip', label=_('Select an Option for the Existing Records:')) self.fields['csv'] = forms.FileField(label=_("CSV File")) if step_numeral == 2: """ Basic Form + Mapping Fields """ # file to make field-mapping form csv = csv_to_dict(file_path) # choices list choices = csv[0].keys() # make tuples; sort tuples (case-insensitive) choice_tuples = [(c, c) for c in csv[0].keys()] # insert blank option choice_tuples.insert(0, ('', '')) choice_tuples = sorted(choice_tuples, key=lambda c: c[0].lower()) app_fields = CorpField.objects.filter(corp_app=corp_app) required_fields = ['name', 'corporate_membership_type'] for field in app_fields: if field.field_type not in ['section_break', 'page_break']: if field.field_name: field_key = field.field_name else: field_key = "field_%s" % field.id is_required = False if field_key in required_fields: is_required = True self.fields[field_key] = ChoiceField( **{ 'label': field.label, 'choices': choice_tuples, 'required': is_required, }) for choice in choices: if (field.label).lower() == choice.lower() or \ field_key.lower() == choice.lower(): self.fields[field_key].initial = choice extra_fields = (('secret_code', _('Secret Code')), ('join_dt', _('Join Date')), ('renew_dt', _('Renew Date')), ('expiration_dt', _('Expiration Date')), ('approved', _('Approved')), ('dues_rep', _('Dues Representative')), ('status', _('Status')), ('status_detail', _('Status Detail'))) # corp_memb_field_names = [smart_str(field.name) # for field in CorporateMembership._meta.fields] for key, label in extra_fields: if key not in self.fields.keys(): self.fields[key] = ChoiceField( **{ 'label': label, 'choices': choice_tuples, 'required': False, }) for choice in choices: if label.lower() == choice.lower() or \ key.lower() == choice.lower(): self.fields[key].initial = choice
def __init__(self, *args, **kwargs): """ Dynamically create fields using the membership application chosen. The choices provided to these dynamic fields are the csv import columns. """ step_numeral, step_name = kwargs.pop('step', (None, None)) corp_app = kwargs.pop('corp_app', '') file_path = kwargs.pop('file_path', '') super(CSVForm, self).__init__(*args, **kwargs) if step_numeral == 1: """ Basic Form: Application & File Uploader """ self.fields['corp_app'] = forms.ModelChoiceField( label=_('Corp Application'), queryset=CorpApp.objects.all()) self.fields['update_option'] = forms.CharField( widget=forms.RadioSelect( choices=(('skip', _('Skip')), ('update', _('Update Blank Fields')), ('override', _('Override All Fields')),)), initial='skip', label=_('Select an Option for the Existing Records:') ) self.fields['csv'] = forms.FileField(label=_("CSV File")) if step_numeral == 2: """ Basic Form + Mapping Fields """ # file to make field-mapping form csv = csv_to_dict(file_path) # choices list choices = csv[0].keys() # make tuples; sort tuples (case-insensitive) choice_tuples = [(c, c) for c in csv[0].keys()] # insert blank option choice_tuples.insert(0, ('', '')) choice_tuples = sorted(choice_tuples, key=lambda c: c[0].lower()) app_fields = CorpField.objects.filter(corp_app=corp_app) required_fields = ['name', 'corporate_membership_type'] for field in app_fields: if field.field_type not in ['section_break', 'page_break']: if field.field_name: field_key = field.field_name else: field_key = "field_%s" % field.id is_required = False if field_key in required_fields: is_required = True self.fields[field_key] = ChoiceField(**{ 'label': field.label, 'choices': choice_tuples, 'required': is_required, }) for choice in choices: if (field.label).lower() == choice.lower() or \ field_key.lower() == choice.lower(): self.fields[field_key].initial = choice extra_fields = (('secret_code', _('Secret Code')), ('join_dt', _('Join Date')), ('renew_dt', _('Renew Date')), ('expiration_dt', _('Expiration Date')), ('approved', _('Approved')), ('dues_rep', _('Dues Representative')), ('status', _('Status')), ('status_detail', _('Status Detail'))) # corp_memb_field_names = [smart_str(field.name) # for field in CorporateMembership._meta.fields] for key, label in extra_fields: if key not in self.fields.keys(): self.fields[key] = ChoiceField(**{ 'label': label, 'choices': choice_tuples, 'required': False, }) for choice in choices: if label.lower() == choice.lower() or \ key.lower() == choice.lower(): self.fields[key].initial = choice