Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ModelForm = self.get_form(request, obj, form=form)
- formsets = []
- if request.method == 'POST':
- # commit only when all forms are valid
- with transaction.commit_manually():
- try:
- objects_count = 0
- changed_count = 0
- objects = queryset.all()
- for obj in objects:
- add_fields = []
- old_values_to_add = {}
- objects_count += 1
- form = ModelForm(request.POST, request.FILES, instance=obj)
- exclude = []
- for fieldname, field in form.fields.items():
- mass_change_checkbox = '_mass_change_%s' % fieldname
- if not (request.POST.has_key(mass_change_checkbox) and request.POST[mass_change_checkbox] in ('on', 'set', 'add')):
- exclude.append(fieldname)
- if request.POST.has_key(mass_change_checkbox) and request.POST[mass_change_checkbox] in ('add',):
- add_fields.append(fieldname)
- for exclude_fieldname in exclude:
- del form.fields[exclude_fieldname]
- if form.is_valid():
- form_validated = True
- new_object = self.save_form(request, form, change=True)
- else:
- form_validated = False
- new_object = obj
- prefixes = {}
- for FormSet in self.get_formsets(request, new_object):
- prefix = FormSet.get_default_prefix()
- prefixes[prefix] = prefixes.get(prefix, 0) + 1
- if prefixes[prefix] != 1:
- prefix = "%s-%s" % (prefix, prefixes[prefix])
- mass_change_checkbox = '_mass_change_%s' % prefix
- if request.POST.has_key(mass_change_checkbox) and request.POST[mass_change_checkbox] in ('on', 'set', 'add'):
- formset = FormSet(request.POST, request.FILES, instance=new_object, prefix=prefix)
- formsets.append(formset)
- for field in add_fields:
- old_values_to_add[field] = list(getattr(obj, field).all())
- if all_valid(formsets) and form_validated:
- self.save_model(request, new_object, form, change=True)
- # self.save_model(request, new_object, form, change=True)
- form.save_m2m()
- for formset in formsets:
- self.save_formset(request, form, formset, change=True)
- for field, value in old_values_to_add.items():
- for rel in value:
- getattr(obj, field).add(rel)
- change_message = self.construct_change_message(request, form, formsets)
- self.log_change(request, new_object, change_message)
- changed_count += 1
- if changed_count != objects_count:
- raise Exception('Some of the selected objects could\'t be changed.')
- transaction.commit()
- return self.response_change(request, new_object)
- finally:
- general_error = unicode(sys.exc_info()[1])
- transaction.rollback()
- form = ModelForm()
Advertisement
Add Comment
Please, Sign In to add comment