(self, revision_view, formset)
Hacks the given formset to contain the correct initial data.
Hacks the given formset to contain the correct initial data.
Hacks the given formset to contain the correct initial data .
def _hack_inline_formset_initial(self, revision_view, formset):
        """Hacks the given formset to contain the correct initial data."""
        # Now we hack it to push in the data from the revision!
        initial = []
        related_versions = self.get_related_versions(
            revision_view.org_obj, revision_view.version, formset)
        formset.related_versions = related_versions
        for related_obj in formset.queryset:
            if unicode(related_obj.pk) in related_versions:
                initial.append(
                    related_versions.pop(unicode(related_obj.pk)).field_dict)
            else:
                initial_data = model_to_dict(related_obj)
                initial_data["DELETE"] = True
                initial.append(initial_data)
        for related_version in related_versions.values():
            initial_row = related_version.field_dict
            pk_name = ContentType.objects.get_for_id(
                related_version.content_type_id).model_class()._meta.pk.name
            del initial_row[pk_name]
            initial.append(initial_row)
        # Reconstruct the forms with the new revision data.
        formset.initial = initial
        formset.forms = [formset._construct_form(
            n) for n in xrange(len(initial))]
        # Hack the formset to force a save of everything.

        def get_changed_data(form):
            return [field.name for field in form.fields]
        for form in formset.forms:
            form.has_changed = lambda: True
            form._get_changed_data = partial(get_changed_data, form=form)

        def total_form_count_hack(count):
            return lambda: count
        formset.total_form_count = total_form_count_hack(len(initial))

        if self.request.method == 'GET' and formset.helper and formset.helper.layout:
            helper = formset.helper
            helper.filter(dutils.basestring).wrap(InlineDiffField)
            fake_admin_class = type(str('%s%sFakeAdmin' % (self.opts.app_label, self.opts.module_name)), (object, ), {'model': self.model})
            for form in formset.forms:
                instance = form.instance
                if instance.pk:
                    form.detail = self.get_view(
                        DetailAdminUtil, fake_admin_class, instance)
def _hack_inline_formset_initial ( self , revision_view , formset ) : # Now we hack it to push in the data from the revision! initial = [ ] related_versions = self . get_related_versions ( revision_view . org_obj , revision_view . version , formset ) formset . related_versions = related_versions for related_obj in formset . queryset : if unicode ( related_obj . pk ) in related_versions : initial . append ( related_versions . pop ( unicode ( related_obj . pk ) ) . field_dict ) else : initial_data = model_to_dict ( related_obj ) initial_data [ "DELETE" ] = True initial . append ( initial_data ) for related_version in related_versions . values ( ) : initial_row = related_version . field_dict pk_name = ContentType . objects . get_for_id ( related_version . content_type_id ) . model_class ( ) . _meta . pk . name del initial_row [ pk_name ] initial . append ( initial_row ) # Reconstruct the forms with the new revision data. formset . initial = initial formset . forms = [ formset . _construct_form ( n ) for n in xrange ( len ( initial ) ) ] # Hack the formset to force a save of everything. def get_changed_data ( form ) : return [ field . name for field in form . fields ] for form in formset . forms : form . has_changed = lambda : True form . _get_changed_data = partial ( get_changed_data , form = form ) def total_form_count_hack ( count ) : return lambda : count formset . total_form_count = total_form_count_hack ( len ( initial ) ) if self . request . method == 'GET' and formset . helper and formset . helper . layout : helper = formset . helper helper . filter ( dutils . basestring ) . wrap ( InlineDiffField ) fake_admin_class = type ( str ( '%s%sFakeAdmin' % ( self . opts . app_label , self . opts . module_name ) ) , ( object , ) , { 'model' : self . model } ) for form in formset . forms : instance = form . instance if instance . pk : form . detail = self . get_view ( DetailAdminUtil , fake_admin_class , instance )