Guest User

Untitled

a guest
Nov 3rd, 2012
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.77 KB | None | 0 0
  1.  
  2.         ModelForm = self.get_form(request, obj, form=form)
  3.  
  4.         formsets = []
  5.         if request.method == 'POST':
  6.             # commit only when all forms are valid
  7.             with transaction.commit_manually():
  8.                 try:
  9.                     objects_count = 0
  10.                     changed_count = 0
  11.                     objects = queryset.all()
  12.                     for obj in objects:
  13.                         add_fields = []
  14.                         old_values_to_add = {}
  15.                         objects_count += 1
  16.                         form = ModelForm(request.POST, request.FILES, instance=obj)
  17.  
  18.                         exclude = []
  19.                         for fieldname, field in form.fields.items():
  20.                             mass_change_checkbox = '_mass_change_%s' % fieldname
  21.                             if not (request.POST.has_key(mass_change_checkbox) and request.POST[mass_change_checkbox] in ('on', 'set', 'add')):
  22.                                 exclude.append(fieldname)
  23.                             if request.POST.has_key(mass_change_checkbox) and request.POST[mass_change_checkbox] in ('add',):
  24.                                 add_fields.append(fieldname)
  25.                         for exclude_fieldname in exclude:
  26.                             del form.fields[exclude_fieldname]
  27.  
  28.                         if form.is_valid():
  29.                             form_validated = True
  30.                             new_object = self.save_form(request, form, change=True)
  31.                         else:
  32.                             form_validated = False
  33.                             new_object = obj
  34.                         prefixes = {}
  35.                         for FormSet in self.get_formsets(request, new_object):
  36.                             prefix = FormSet.get_default_prefix()
  37.                             prefixes[prefix] = prefixes.get(prefix, 0) + 1
  38.                             if prefixes[prefix] != 1:
  39.                                 prefix = "%s-%s" % (prefix, prefixes[prefix])
  40.                             mass_change_checkbox = '_mass_change_%s' % prefix
  41.                             if request.POST.has_key(mass_change_checkbox) and request.POST[mass_change_checkbox] in ('on', 'set', 'add'):
  42.                                 formset = FormSet(request.POST, request.FILES, instance=new_object, prefix=prefix)
  43.                                 formsets.append(formset)
  44.                         for field in add_fields:
  45.                             old_values_to_add[field] = list(getattr(obj, field).all())
  46.                         if all_valid(formsets) and form_validated:
  47.                             self.save_model(request, new_object, form, change=True)
  48.                             # self.save_model(request, new_object, form, change=True)
  49.                             form.save_m2m()
  50.                             for formset in formsets:
  51.                                 self.save_formset(request, form, formset, change=True)
  52.                             for field, value in old_values_to_add.items():
  53.                                 for rel in value:
  54.                                     getattr(obj, field).add(rel)
  55.  
  56.                             change_message = self.construct_change_message(request, form, formsets)
  57.                             self.log_change(request, new_object, change_message)
  58.                             changed_count += 1
  59.  
  60.                     if changed_count != objects_count:
  61.                         raise Exception('Some of the selected objects could\'t be changed.')
  62.                     transaction.commit()
  63.                     return self.response_change(request, new_object)
  64.  
  65.                 finally:
  66.                     general_error = unicode(sys.exc_info()[1])
  67.                     transaction.rollback()
  68.  
  69.  
  70.         form = ModelForm()
Advertisement
Add Comment
Please, Sign In to add comment