From e9076a1e33e504b1dcb35e6e2ee053828a0d318d Mon Sep 17 00:00:00 2001 From: Mohammad Hasnain Mohsin Rajan Date: Wed, 4 Aug 2021 13:24:56 +0530 Subject: [PATCH] fix: Get title only when necessary (#13831) * fix: query only if necessary * fix: titile not found * chore: linting * chore: use `not in` * chore: translate title * chore: quotes * chore: quotes --- frappe/core/doctype/doctype/doctype.py | 3 +++ frappe/search/website_search.py | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index d2f62d0a15..12abfc533b 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -931,6 +931,9 @@ def validate_fields(meta): if meta.website_search_field not in fieldname_list: frappe.throw(_("Website Search Field must be a valid fieldname"), InvalidFieldNameError) + if "title" not in fieldname_list: + frappe.throw(_('Field "title" is mandatory if "Website Search Field" is set.'), title=_("Missing Field")) + def check_timeline_field(meta): if not meta.timeline_field: return diff --git a/frappe/search/website_search.py b/frappe/search/website_search.py index 70962e8172..95bc9b9211 100644 --- a/frappe/search/website_search.py +++ b/frappe/search/website_search.py @@ -90,19 +90,22 @@ class WebsiteSearch(FullTextSearch): def slugs_with_web_view(_items_to_index): all_routes = [] filters = { "has_web_view": 1, "allow_guest_to_view": 1, "index_web_pages_for_search": 1} - fields = ["name", "is_published_field", 'website_search_field'] + fields = ["name", "is_published_field", "website_search_field"] doctype_with_web_views = frappe.get_all("DocType", filters=filters, fields=fields) for doctype in doctype_with_web_views: if doctype.is_published_field: - docs = frappe.get_all(doctype.name, filters={doctype.is_published_field: 1}, fields=["route", doctype.website_search_field, 'title']) + fields=["route", doctype.website_search_field] + filters={doctype.is_published_field: 1}, if doctype.website_search_field: + docs = frappe.get_all(doctype.name, filters=filters, fields=fields.append("title")) for doc in docs: content = frappe.utils.md_to_html(getattr(doc, doctype.website_search_field)) soup = BeautifulSoup(content, "html.parser") text_content = soup.text if soup else "" _items_to_index += [frappe._dict(title=doc.title, content=text_content, path=doc.route)] else: + docs = frappe.get_all(doctype.name, filters=filters, fields=fields) all_routes += [route.route for route in docs] return all_routes