Example #1
0
 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()))
Example #2
0
 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})