def render_reply(self):
        """
        Create a :class:`~.Data` object equal to the object from which the from
        was created through :meth:`from_xso`, except that the values of the
        fields are exchanged with the values set on the form.

        Fields which have no corresponding form descriptor are left untouched.
        Fields which are accessible through form descriptors, but are not in
        the original :class:`~.Data` are not included in the output.

        This method only works on forms created through :meth:`from_xso`.

        The resulting :class:`~.Data` instance has the :attr:`~.Data.type_` set
        to :attr:`~.DataType.SUBMIT`.
        """

        data = copy.copy(self._recv_xso)
        data.type_ = forms_xso.DataType.SUBMIT
        data.fields = list(self._recv_xso.fields)

        for i, field_xso in enumerate(data.fields):
            if field_xso.var is None:
                continue
            if field_xso.var == "FORM_TYPE":
                continue
            key = fields.descriptor_ns, field_xso.var
            try:
                descriptor = self.DESCRIPTOR_MAP[key]
            except KeyError:
                continue

            bound_field = descriptor.__get__(self, type(self))
            data.fields[i] = bound_field.render(
                use_local_metadata=False
            )

        return data
Create a :class:`~.Data` object equal to the object from which the from
        was created through :meth:`from_xso`, except that the values of the
        fields are exchanged with the values set on the form.

        Fields which have no corresponding form descriptor are left untouched.
        Fields which are accessible through form descriptors, but are not in
        the original :class:`~.Data` are not included in the output.

        This method only works on forms created through :meth:`from_xso`.

        The resulting :class:`~.Data` instance has the :attr:`~.Data.type_` set
        to :attr:`~.DataType.SUBMIT`.