diff --git a/frappe/__init__.py b/frappe/__init__.py
index 1c9d1f6d93..27862a6a55 100644
--- a/frappe/__init__.py
+++ b/frappe/__init__.py
@@ -240,6 +240,7 @@ def init(site: str, sites_path: str = ".", new_site: bool = False) -> None:
local.document_cache = {}
local.meta_cache = {}
local.form_dict = _dict()
+ local.preload_assets = {"style": [], "script": []}
local.session = _dict()
local.dev_server = _dev_server
local.qb = get_query_builder(local.conf.db_type or "mariadb")
diff --git a/frappe/desk/doctype/tag/tag.py b/frappe/desk/doctype/tag/tag.py
index ca167c148e..84239fae6d 100644
--- a/frappe/desk/doctype/tag/tag.py
+++ b/frappe/desk/doctype/tag/tag.py
@@ -192,4 +192,4 @@ def get_documents_for_tag(tag):
@frappe.whitelist()
def get_tags_list_for_awesomebar():
- return [t.name for t in frappe.get_list("Tag")]
+ return frappe.get_list("Tag", pluck="name", order_by=None)
diff --git a/frappe/desk/form/load.py b/frappe/desk/form/load.py
index bb48c8c4ed..0b1e79208d 100644
--- a/frappe/desk/form/load.py
+++ b/frappe/desk/form/load.py
@@ -452,7 +452,9 @@ def get_title_values_for_link_and_dynamic_link_fields(doc, link_fields=None):
if not meta or not (meta.title_field and meta.show_title_field_in_link):
continue
- link_title = frappe.db.get_value(doctype, doc.get(field.fieldname), meta.title_field, cache=True)
+ link_title = frappe.db.get_value(
+ doctype, doc.get(field.fieldname), meta.title_field, cache=True, order_by=None
+ )
link_titles.update({doctype + "::" + doc.get(field.fieldname): link_title})
return link_titles
diff --git a/frappe/model/document.py b/frappe/model/document.py
index 5add5fba4e..2a82b5af9a 100644
--- a/frappe/model/document.py
+++ b/frappe/model/document.py
@@ -15,6 +15,7 @@ from frappe.model import optional_fields, table_fields
from frappe.model.base_document import BaseDocument, get_controller
from frappe.model.docstatus import DocStatus
from frappe.model.naming import set_new_name, validate_name
+from frappe.model.utils import is_virtual_doctype
from frappe.model.workflow import set_workflow_state_on_action, validate_workflow
from frappe.utils import cstr, date_diff, file_lock, flt, get_datetime_str, now
from frappe.utils.data import get_absolute_url
@@ -154,11 +155,7 @@ class Document(BaseDocument):
# Make sure not to query the DB for a child table, if it is a virtual one.
# During frappe is installed, the property "is_virtual" is not available in tabDocType, so
# we need to filter those cases for the access to frappe.db.get_value() as it would crash otherwise.
- if (
- hasattr(self, "doctype")
- and not hasattr(self, "module")
- and frappe.db.get_value("DocType", df.options, "is_virtual", cache=True)
- ):
+ if hasattr(self, "doctype") and not hasattr(self, "module") and is_virtual_doctype(df.options):
self.set(df.fieldname, [])
continue
diff --git a/frappe/model/utils/__init__.py b/frappe/model/utils/__init__.py
index 2220b3904f..bf6804ad05 100644
--- a/frappe/model/utils/__init__.py
+++ b/frappe/model/utils/__init__.py
@@ -128,6 +128,6 @@ def get_fetch_values(doctype, fieldname, value):
return result
-@site_cache(maxsize=128)
+@site_cache()
def is_virtual_doctype(doctype):
return frappe.db.get_value("DocType", doctype, "is_virtual")
diff --git a/frappe/public/js/frappe/form/layout.js b/frappe/public/js/frappe/form/layout.js
index 770df2a5a9..3bd9e451db 100644
--- a/frappe/public/js/frappe/form/layout.js
+++ b/frappe/public/js/frappe/form/layout.js
@@ -278,7 +278,10 @@ frappe.ui.form.Layout = class Layout {
make_section(df = {}) {
this.section_count++;
- if (!df.fieldname) df.fieldname = `__section_${this.section_count}`;
+ if (!df.fieldname) {
+ df.fieldname = `__section_${this.section_count}`;
+ df.fieldtype = "Section Break";
+ }
this.section = new Section(
this.current_tab ? this.current_tab.wrapper : this.page,
@@ -300,7 +303,10 @@ frappe.ui.form.Layout = class Layout {
make_column(df = {}) {
this.column_count++;
- if (!df.fieldname) df.fieldname = `__column_${this.section_count}`;
+ if (!df.fieldname) {
+ df.fieldname = `__column_${this.section_count}`;
+ df.fieldtype = "Column Break";
+ }
this.column = new Column(this.section, df);
if (df && df.fieldname) {
diff --git a/frappe/public/js/frappe/recorder/RequestDetail.vue b/frappe/public/js/frappe/recorder/RequestDetail.vue
index c07e6220a9..8ee6ff631b 100644
--- a/frappe/public/js/frappe/recorder/RequestDetail.vue
+++ b/frappe/public/js/frappe/recorder/RequestDetail.vue
@@ -25,8 +25,8 @@
{{ column.label }}
-