Release Notes — v0.2.11 (July 2, 2026)
1. disable_if — Multi-Condition & Multi-Value Support
Status: Uncommitted
Plan: .kilo/plans/1782991355269-disable-if-multi-condition.md
The disable_if fieldtab configuration now supports multiple conditions (list of dicts) and multiple values per condition (list of strings), matching the existing pattern used by hide_if. Previously, disable_if only accepted a single dict with one field/value pair.
New Allowed Formats
# 1. Single condition, single value (existing — fully backward compatible)
'disable_if': {'field': 'postedstatus', 'value': 'POSTED'}
# 2. Single condition, multiple values (NEW)
'disable_if': {'field': 'Approvalstatus', 'value': ['in_review', 'approved']}
# 3. Multiple conditions, list of dicts (NEW)
'disable_if': [
{'field': 'Approvalstatus', 'value': 'in_review', 'source': 'parent'},
{'field': 'postedstatus', 'value': 'POSTED'},
]
# 4. Mixed single/multi values across conditions (NEW)
'disable_if': [
{'field': 'Approvalstatus', 'value': ['in_review', 'approved'], 'source': 'Frameworktestdocument'},
{'field': 'postedstatus', 'value': 'POSTED', 'source': 'self'},
]
Logic
- Multiple conditions: OR logic — the first matching condition sets
disable_all = Trueand short-circuits. - Multiple values per condition: Value can be a string (equality check
==) or a list/tuple (incheck). Also OR logic. - Source resolution: Delegates to
_resolve_condition_source()supporting'self','parent', and model-name-based FK ancestor traversal (same ashide_if).
Changes
enezaframework/views/mixins.py: Replaced the ~7-linedisable_ifblock in both methods:UiMixin.get_fieldtab_config()(line 112)UiMixinjournal.get_fieldtab_config()(line 623)
Edge Cases
| Case | Behavior |
|---|---|
disable_if is None or absent |
No change, logic skipped |
disable_if is empty list [] |
No conditions, logic skipped |
value is empty list [] |
Never matches, tab not disabled |
Resolved source object is None |
Condition skipped, not matched |
Resolved source lacks the field |
Condition skipped, not matched |
Files changed: 1 file.
2. UrlMixin.get_calling_url() — Override via calling_url GET Parameter
Status: Uncommitted
UrlMixin.get_calling_url() now checks for a calling_url GET parameter first. When present, it is returned immediately as the calling URL, bypassing the normal resolve_source() + {parent_model}_detail construction. This allows views to pass an explicit redirect target via query string.
Changes
enezaframework/views/mixins.py: Addedcalling_url = self.request.GET.get("calling_url")check at the top ofget_calling_url(), with early return on match.
Files changed: 1 file.
3. Nav Actions — Data Extraction Menu Include
Status: Uncommitted
The navaextractionmenu.html partial is now included in the main nav actions toolbar (navactions.html), adding data extraction/export functionality directly to the detail view action bar.
Changes
enezaframework/templates/core/partials/navactions.html: Added{% include "core/partials/navaextractionmenu.html" %}after the delete button and before the print actions block.
Files changed: 1 file.
4. Framework Test App — Demo View for disable_if with Ancestor Source
Status: Uncommitted
Frameworktestdocumentline Updates
frameworkapp/models.py: AddedframeworktestForeignKey onFrameworktestdocumentline(related_name="frameworktest_lines") to enable navigation through the FK chain for condition source resolution.frameworkapp/views/testviews.py:- Added a "Description" tab to
FrameworktestdocumentlineDetailViewdemonstratingdisable_ifwithsource: 'Frameworktestdocument'— the tab is disabled when the parent document'sApprovalstatusis'approved'. - Added
frameworktestto the first tab'sFieldcolumns. - Minor whitespace/formatting cleanup in
FrameworktestdocumentlinecomponentDetailView.
Files changed: 2 files.
5. Version Bump
setup.py: Version bumped from0.2.10→0.2.11.
Summary
| Area | Description | Files |
|---|---|---|
disable_if Enhancement |
Multi-condition (list of dicts, OR logic) and multi-value (list/tuple, OR logic) support in both UiMixin and UiMixinjournal |
1 |
| URL Mixin | calling_url GET parameter override in get_calling_url() |
1 |
| Nav Actions | navaextractionmenu.html partial included in action toolbar |
1 |
| Test App | Demo tab for disable_if with ancestor model source; FK added on Frameworktestdocumentline |
2 |
| Versioning | Version bumped to 0.2.11 | 1 |
Total: 5 modified files, 82 insertions, 16 deletions.
Note: All changes are uncommitted and untested. The user is solely responsible for testing and validating all outputs before committing or deploying.