diff --git a/bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/ERP5Document_getHateoas.py b/bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/ERP5Document_getHateoas.py
index c87713ac5dd32e0c76f57cd812973d1b4a4d9efd..54b4447a98b25ed4259896ba1202e5dc756ca47f 100644
--- a/bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/ERP5Document_getHateoas.py
+++ b/bt5/erp5_hal_json_style/SkinTemplateItem/portal_skins/erp5_hal_json_style/ERP5Document_getHateoas.py
@@ -309,9 +309,11 @@ url_template_dict = {
 default_document_uri_template = url_template_dict["jio_get_template"]
 Base_translateString = context.getPortalObject().Base_translateString
 
+
 def getRealRelativeUrl(document):
   return '/'.join(portal.portal_url.getRelativeContentPath(document))
 
+
 def getFormRelativeUrl(form):
   return portal.portal_catalog(
     portal_type="ERP5 Form",
@@ -321,12 +323,17 @@ def getFormRelativeUrl(form):
     select_dict={'relative_url': None}
   )[0].relative_url
 
-def getFieldDefault(traversed_document, field, key, value=None):
-  # REQUEST.get(field.id, field.get_value("default"))
-  result = traversed_document.Field_getDefaultValue(field, key, value, REQUEST)
-  if getattr(result, 'translate', None) is not None:
-    result = "%s" % result
-  return result
+
+def getFieldDefault(form, field, key, value=None):
+  """Get available value for `field` preferably in python-object from REQUEST or from field's default."""
+  if value is None:
+    value = (REQUEST.form.get(field.id, REQUEST.form.get(key, None)) or
+             field.get_value('default', request=REQUEST, REQUEST=REQUEST))
+    if field.has_value("unicode") and field.get_value("unicode") and isinstance(value, 'unicode'):
+      value = unicode(value, self.get_form_encoding())
+  if getattr(value, 'translate', None) is not None:
+    return "%s" % value
+  return value
 
 
 def renderField(traversed_document, field, form, value=None, meta_type=None, key=None, key_prefix=None, selection_params=None):
@@ -358,7 +365,7 @@ def renderField(traversed_document, field, form, value=None, meta_type=None, key
     # fields have default value and can be required (unlike boxes)
     result.update({
       "required": field.get_value("required") if field.has_value("required") else None,
-      "default": getFieldDefault(traversed_document, field, result["key"], value),
+      "default": getFieldDefault(form, field, key, value),
     })
 
   if meta_type == "ProxyField":
@@ -423,7 +430,7 @@ def renderField(traversed_document, field, form, value=None, meta_type=None, key
       "hide_day": field.get_value('hide_day'),
       "hidden_day_is_last_day": field.get_value('hidden_day_is_last_day'),
     })
-    date_value = getFieldDefault(traversed_document, field, result["key"], value)
+    date_value = getFieldDefault(form, field, key, value)
     if not date_value and field.get_value('default_now'):
       date_value = DateTime()
     if same_type(date_value, DateTime()):