Skip to content

Commit 08fedff

Browse files
committed
Fix select_related('workflow') → prefetch_related('workflows') in ajax views
select_related cannot traverse reverse ForeignKey relations. Changed three DataTables ajax views (pending, completed, admin approvals) to use prefetch_related('form_definition__workflows') instead. Also fix sync_api import hasattr check for sub-workflow config. Fixes: completedTable Ajax error on test3. Bump version to 0.23.2
1 parent 3310763 commit 08fedff

3 files changed

Lines changed: 9 additions & 9 deletions

File tree

django_forms_workflows/sync_api.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -579,11 +579,12 @@ def import_form(form_data, conflict="update", category_cache=None):
579579
if sub_wf_data:
580580
sub_form_slug = sub_wf_data.get("sub_workflow_form_slug")
581581
sub_wf_form = FormDefinition.objects.filter(slug=sub_form_slug).first()
582-
if sub_wf_form and hasattr(sub_wf_form, "workflow"):
582+
sub_wf = sub_wf_form.workflow if sub_wf_form else None
583+
if sub_wf:
583584
SubWorkflowDefinition.objects.update_or_create(
584585
parent_workflow=wf,
585586
defaults={
586-
"sub_workflow": sub_wf_form.workflow,
587+
"sub_workflow": sub_wf,
587588
"section_label": sub_wf_data.get("section_label", ""),
588589
"count_field": sub_wf_data.get("count_field", ""),
589590
"label_template": sub_wf_data.get(

django_forms_workflows/views.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2464,8 +2464,8 @@ def completed_approvals_ajax(request):
24642464

24652465
# --- Page slice ---
24662466
base_qs = qs.select_related(
2467-
"form_definition__category", "form_definition__workflow", "submitter"
2468-
)
2467+
"form_definition__category", "submitter"
2468+
).prefetch_related("form_definition__workflows")
24692469
# Only defer form_data when we don't need it (no per-form column expansion).
24702470
# .defer(None) is invalid Django — conditionally apply instead.
24712471
if not form_slug:
@@ -2591,9 +2591,8 @@ def approval_inbox_ajax(request):
25912591
# --- Page slice ---
25922592
page_qs = qs.select_related(
25932593
"submission__form_definition__category",
2594-
"submission__form_definition__workflow",
25952594
"submission__submitter",
2596-
)[start : start + length]
2595+
).prefetch_related("submission__form_definition__workflows")[start : start + length]
25972596

25982597
# --- Serialise ---
25992598
data = []
@@ -2692,8 +2691,8 @@ def my_submissions_ajax(request):
26922691
except FormDefinition.DoesNotExist:
26932692
pass
26942693

2695-
base_qs = qs.select_related(
2696-
"form_definition__category", "form_definition__workflow"
2694+
base_qs = qs.select_related("form_definition__category").prefetch_related(
2695+
"form_definition__workflows"
26972696
)
26982697
if not form_slug:
26992698
base_qs = base_qs.defer("form_data")

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "django-forms-workflows"
3-
version = "0.23.1"
3+
version = "0.23.2"
44
description = "Enterprise-grade, database-driven form builder with approval workflows and external data integration"
55
license = "LGPL-3.0-only"
66
readme = "README.md"

0 commit comments

Comments
 (0)