Merge pull request #36615 from GursheenK/virtual-df-value-in-document-getter

fix: title for link field in virtual docfield titles
This commit is contained in:
Ejaaz Khan 2026-04-14 19:51:34 +05:30 committed by GitHub
commit 93bec95024
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 19 additions and 8 deletions

View file

@ -168,7 +168,9 @@ def search_widget(
}
search_fields = ["name"]
if meta.title_field:
search_fields.append(meta.title_field)
is_virtual_field = getattr(meta.get_field(meta.title_field), "is_virtual", False)
if not is_virtual_field:
search_fields.append(meta.title_field)
if meta.search_fields:
search_fields.extend(meta.get_search_fields())
@ -348,7 +350,12 @@ def build_for_autosuggest(res: list[tuple], doctype: str) -> list[LinkSearchResu
for item in res:
item = list(item)
if len(item) == 1:
item = [item[0], item[0]]
title_field = meta.title_field
docfield = meta.get_field(title_field)
if docfield and docfield.is_virtual:
doc = frappe.get_doc(meta.name, item[0])
title_value = doc.get_virtual_field_value(docfield)
item = [item[0], title_value or item[0]]
label = _(item[1]) if meta.translated_doctype else item[1]
item[1] = item[0]

View file

@ -541,6 +541,15 @@ class BaseDocument:
eval_locals={"doc": self},
)
def get_virtual_field_value(self, df):
fieldname = df.fieldname
if (prop := getattr(type(self), fieldname, None)) and is_a_property(prop):
return getattr(self, fieldname)
elif options := getattr(df, "options", None):
return self._evaluate_virtual_field_options(options)
def get_valid_dict(
self, sanitize=True, convert_dates_to_str=False, ignore_nulls=False, ignore_virtual=False
) -> _dict:
@ -563,12 +572,7 @@ class BaseDocument:
if is_virtual_field:
if ignore_virtual or fieldname not in self.permitted_fieldnames:
continue
if (prop := getattr(type(self), fieldname, None)) and is_a_property(prop):
value = getattr(self, fieldname)
elif options := getattr(df, "options", None):
value = self._evaluate_virtual_field_options(options)
value = self.get_virtual_field_value(df)
fieldtype = df.fieldtype
if isinstance(value, list) and fieldtype not in table_fields: