def _step_3(self, request, app_name=None, model_name=None, temp_file_name=None, extra_context=None ): context = self._get_base_context(request, app_name, model_name) Model = get_model(app_name, model_name) extra_context = extra_context or {} if 'apply' in request.POST: Form = csv_processor_factory(app_name, model_name, temp_file_name) form = Form(request.POST, request.FILES) if form.is_valid(): mapping = self.__get_mapping(form) Model = get_model(app_name, model_name) with open_csv(temp_file_name) as csv: if form.cleaned_data['header']: csv.next() for i, row in enumerate(csv): record, key = self._process_row(row, mapping) try: if key: sample, _ = Model.objects.get_or_create(**key) else: sample = Model() sample = update_model(request, sample, record, mapping) sample.save() except (IntegrityError, ObjectDoesNotExist), e: messages.error(request, str(e)) return redirect('%s:%s_%s_changelist' % (self.name, app_name, model_name.lower()))
def _step_2(self, request, app_name=None, model_name=None, temp_file_name=None): records = [] context = self._get_base_context(request, app_name, model_name) try: Form = csv_processor_factory(app_name, model_name, temp_file_name) if request.method == 'POST': form = Form(request.POST, request.FILES) if form.is_valid(): mapping = self.__get_mapping(form) Model = get_model(app_name, model_name) with open_csv(temp_file_name) as csv: if form.cleaned_data['header']: csv.next() for i, row in enumerate(csv): if i > 20 and not form.cleaned_data['preview_all']: break try: sample = Model() record, key = self._process_row(row, mapping) exists = key and Model.objects.filter(**key).exists() or False if key and exists: sample = Model.objects.get(**key) else: sample = Model() sample = update_model(request, sample, record, mapping) records.append([sample, None, row]) except (ValidationError, AttributeError), e: records.append([sample, str(e), row]) except (ValueError, ObjectDoesNotExist, ValidationError), e: #messages.error(request, '%s' % e) records.append([sample, str(e)]) return self._step_3(request, app_name, model_name, temp_file_name, {'records': records, 'form': form})