Web Forms
Patterns for developing Frappe Web Forms (portal pages).
When to Use
- Creating public-facing forms (customer portals, application forms)
- Customizing existing Web Form client scripts
- Styling Web Forms with custom CSS
- Managing Web Forms via REST API
Key References
resources/web-form-patterns.md— Complete client script patterns, CSS, and gotchas
Critical Gotchas
- Use
set_values()NOTset_value()— WebForm extends FieldGroup, not Form - Always wrap in
frappe.ready()— ensures form is loaded before code runs - Read-only fields CAN be set via
set_values()in client scripts
Quick Template
javascript
frappe.ready(function() {
// Set initial values
frappe.web_form.set_values({
date: frappe.datetime.get_today()
});
// Validate before submit
frappe.web_form.validate = function() {
let values = frappe.web_form.get_values();
if (!values.email) {
frappe.msgprint(__('Email is required'));
return false;
}
return true;
};
});