Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 22 Jul 15:24
  • Backwards incompatible: the minimum supported Django is now 5.2 LTS.
    Tested against Django 5.2 and 6.0.

  • The Polish translation now actually works when installed from PyPI. Django
    reads compiled .mo catalogues rather than the .po sources, and *.mo is
    gitignored, so every release up to and including 0.3.2 shipped the .po
    alone and the translation silently did nothing. Releases now compile the
    catalogues before building, and the build fails if the wheel ends up with
    fewer .mo files than .po files.

  • The example/ project, which could not start on any supported Django, is
    replaced by demo/ -- a working project that runs against either the plain
    admin (make demo) or grappelli (make demo-grappelli) from one set of
    models and seed data.

  • Documentation is rewritten and published to
    https://mpasternak.github.io/django-flexible-reports/. The previous
    docs/readme.rst included a README.rst that does not exist and
    rendered blank; the install instructions recommended easy_install.

    The manual is now built with MkDocs and the
    Material theme instead of
    Sphinx, and its sources are Markdown.

  • Three migrations no longer import
    django.contrib.postgres.fields.jsonb. That import pulled in
    psycopg2 at module load, so migrate failed on SQLite for anyone who
    had installed only the runtime dependencies.

  • Table and Report can now be cloned from the admin, using a Clone
    button on the change form. Cloning a table copies its columns and its sort
    order; cloning a report copies its elements, which keep pointing at the same
    tables and datasources. The clone's name gets a translatable (copy)
    suffix.

    Both are also available programmatically as Table.clone() and
    Report.clone(). Neither modifies the source object.

    The button is verified to work with grappelli, which ships its own
    admin/change_form.html; a regression test guards it.

  • Fix stale table headers. A cached table class was kept per Table.pk for
    the lifetime of the process and never invalidated, so editing a column's
    label -- or deleting a column -- only became visible after restarting
    Django. With several workers the page alternated between old and new
    headers depending on which worker answered.

    The cache is gone. Compiled column templates are cached instead, keyed by
    the template source so no invalidation is needed, which more than pays the
    removal back: rendering a 500-row table is ~1.25x faster than before, since
    TemplateColumn used to recompile its template for every single cell.