fix: don't return virtual values before save

This commit is contained in:
Gursheen Anand 2026-02-02 22:12:01 +05:30
parent dbfa0495ab
commit 7e92362892

View file

@ -311,16 +311,7 @@ class BaseDocument:
def get_db_value(self, key):
return frappe.db.get_value(self.doctype, self.name, key)
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(self, key, filters=None, limit=None, default=None, ignore_virtual=False):
def get(self, key, filters=None, limit=None, default=None):
if isinstance(key, dict):
return _filter(self.get_all_children(), key, limit=limit)
@ -336,15 +327,6 @@ class BaseDocument:
if limit and isinstance(value, list | tuple) and len(value) > limit:
value = value[:limit]
if not value:
df = self.meta.get_field(key)
is_virtual_field = getattr(df, "is_virtual", False)
ignore_virtual = ignore_virtual or key not in self.permitted_fieldnames
if is_virtual_field and not ignore_virtual:
value = self.get_virtual_field_value(df, ignore_virtual)
return value
def getone(self, key, filters=None):
@ -512,6 +494,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: