'This method is used to "publish" this extension as part of the a larger
operation on the target. If you intend to copy this extension to an
unrelated object, use copy() instead.'

def copy_to_public(self, public_object, language):

    this = self.__class__.objects.get(pk=self.pk)
    public_extension = self.public_extension
    this.extended_object = public_object
    if public_extension:
        this.pk = public_extension.pk
        this.public_extension = None
        for (parent, field) in this._meta.parents.items():
            if field:
                setattr(this, parent._meta.pk.attname, getattr(public_extension, parent._meta.pk.attname))
    else:
        this.pk = None
        for (parent, field) in this._meta.parents.items():
            if field:
                setattr(this, parent._meta.pk.attname, None)
        this.save(mark_page=False)
        self.public_extension = this
        self.save(mark_page=False)
    this.copy_relations(self, language)
    this.save(force_update=True, mark_page=False)
    return this
