fix: updated keys and link response to return full object instead of just title
This commit is contained in:
parent
3ad961e8dd
commit
36012487f9
2 changed files with 31 additions and 20 deletions
|
|
@ -81,21 +81,38 @@ def read_doc(doctype: str, name: str):
|
|||
doc = frappe.get_doc(doctype, name)
|
||||
doc.check_permission("read")
|
||||
doc.apply_fieldlevel_read_permissions()
|
||||
doc_dict = doc.as_dict()
|
||||
if frappe.form_dict.get("expand_links") and json.loads(frappe.form_dict["expand_links"]):
|
||||
meta = frappe.get_meta(doctype)
|
||||
link_titles = {}
|
||||
link_fields = meta.get_link_fields() + meta.get_dynamic_link_fields()
|
||||
get_values_for_link_and_dynamic_link_fields(doc_dict)
|
||||
get_values_for_table_and_multiselect_fields(doc_dict)
|
||||
|
||||
if link_fields:
|
||||
link_titles.update(get_title_values_for_link_and_dynamic_link_fields(doc, link_fields))
|
||||
return doc_dict
|
||||
|
||||
table_fields = meta.get_table_fields()
|
||||
if table_fields:
|
||||
link_titles.update(get_title_values_for_table_and_multiselect_fields(doc, table_fields))
|
||||
|
||||
return doc.as_dict().update({"_link_titles": link_titles})
|
||||
else:
|
||||
return doc.as_dict()
|
||||
def get_values_for_link_and_dynamic_link_fields(doc_dict):
|
||||
meta = frappe.get_meta(doc_dict.doctype)
|
||||
link_fields = meta.get_link_fields() + meta.get_dynamic_link_fields()
|
||||
|
||||
for field in link_fields:
|
||||
if not (doc_fieldvalue := getattr(doc_dict, field.fieldname, None)):
|
||||
continue
|
||||
|
||||
doctype = field.options if field.fieldtype == "Link" else doc_dict.get(field.options)
|
||||
|
||||
link_doc = frappe.get_doc(doctype, doc_fieldvalue)
|
||||
doc_dict.update({"_expanded_" + field.fieldname: link_doc})
|
||||
|
||||
|
||||
def get_values_for_table_and_multiselect_fields(doc_dict):
|
||||
meta = frappe.get_meta(doc_dict.doctype)
|
||||
table_fields = meta.get_table_fields()
|
||||
|
||||
for field in table_fields:
|
||||
if not doc_dict.get(field.fieldname):
|
||||
continue
|
||||
|
||||
for value in doc_dict.get(field.fieldname):
|
||||
value.update(get_values_for_link_and_dynamic_link_fields(value))
|
||||
|
||||
|
||||
def execute_doc_method(doctype: str, name: str, method: str | None = None):
|
||||
|
|
|
|||
|
|
@ -96,18 +96,12 @@ def get_list(
|
|||
doctype_title_maps = {}
|
||||
|
||||
for link_doctype, values in doctype_values.items():
|
||||
link_meta = frappe.get_meta(link_doctype)
|
||||
if not link_meta.title_field or not link_meta.show_title_field_in_link:
|
||||
continue
|
||||
|
||||
title_field = link_meta.title_field
|
||||
|
||||
records = frappe.get_all(
|
||||
link_doctype,
|
||||
filters={"name": ["in", list(values)]},
|
||||
fields=["name", title_field],
|
||||
fields=["*"],
|
||||
)
|
||||
doctype_title_maps[link_doctype] = {r["name"]: r[title_field] for r in records}
|
||||
doctype_title_maps[link_doctype] = {r["name"]: r for r in records}
|
||||
|
||||
for li in _list:
|
||||
for fieldname in expand:
|
||||
|
|
@ -117,7 +111,7 @@ def get_list(
|
|||
val = li.get(fieldname)
|
||||
val_title = doctype_title_maps.get(link_doctype, {}).get(val)
|
||||
if val and val_title:
|
||||
li["_" + fieldname + "_title"] = val_title
|
||||
li["_expanded_" + fieldname] = val_title
|
||||
|
||||
return _list
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue