Skip to content

Select

Pick one (or many) from a map of options — searchable when the list gets long.

from almasix.orbit.forms import Form, Select
form = Form.make("demo").schema([
Select.make("status")
.options({"draft": "Draft", "published": "Published"})
.searchable()
.required()
])
from almasix.orbit import Resource
from almasix.orbit.forms import Form, Select
class PostResource(Resource):
@classmethod
def form(cls, form: Form) -> Form:
return form.schema([
Select.make("status")
.options({"draft": "Draft", "published": "Published"})
.default("draft"),
Select.make("author_id")
.relationship(
"author",
"name",
search_columns=["name", "email"],
preload=True,
)
.searchable(),
Select.make("city").options({
"Europe": {"berlin": "Berlin", "paris": "Paris"},
"Asia": {"tokyo": "Tokyo"},
}),
])
  • .options(dict | callable | list[{label, options}]) — flat map, nested groups, or list of groups
  • .multiple() / .searchable() — searchable adds Alpine filter + data-searchable
  • .relationship(name, title_attribute, *, search_columns, preload, modify_query, get_option_label)
  • .create_option_form(...) / .edit_option_action(...) — mount buttons for create/edit flows
  • .required() / .disabled(...) / .visible(...) / .live()
  • .default(...) / .label(...)

Closures work on .label(), .helper_text(), .placeholder(), .visible(), .disabled(), and .required() — see Form closures.

Orbit form example (light)

Orbit form example (dark)