Skip to content

pyvelm v0.2.1

Release date: 2026-05-22
Base module: 0.18.0 (unchanged)

Patch release: inline One2many editing on parent forms is now usable end to end, with validation playback and clearer relational field labels.


Highlights

Inline One2many tables

Edit child lines on the parent form without opening a dialog for every row.

  • Auto table when the comodel has a list view (or widget="table")
  • Add a line footer row + Add row button — both append an editable <tr>
  • Per-cell validation on save failure (422): errors and typed values replay
  • Drag-reorder when the comodel list view declares sequence
  • Delete row marks existing lines for unlink; new lines drop on delete

Many2many polish

Chip editor matches Many2one UX: search, create inline, open linked record in the form dialog.

Smarter default labels

Relational fields no longer show raw column names:

Field Before After
company_id Company id Company
country_id Country id Country
tag_ids Tag ids Tags
child_ids Child ids Children

Set string="…" on the field in your model to override.


Bug fixes

  • Add row no longer stacks fields vertically — cloning used innerHTML, which broke on nested Alpine <template> markup inside M2O cells; now clones template.content and calls Alpine.initTree.
  • Inline table column alignment; Many2many / nested One2many columns excluded from compact rows.
  • Demo seed discovers bundled base via BUILTIN_MODULE_ROOTS.

Install

pip install pyvelm==0.2.1

Upgrade from v0.2.0

  1. pip install -U pyvelm==0.2.1
  2. Restart the app process (models reload field label defaults at import)
  3. Rebuild CSS if you customize templates: npm run build

No database migrations required for this patch.


What's next

  • Vellum — Eloquent-style ORM veneer (later removed from the framework)
  • Mail followers & message subtypes
  • S3/MinIO attachment backend
  • O2m inline tables: Filter By / search bar (list-view parity)

Full diff: v0.2.0…v0.2.1