Skip to main content

Linking Workflow to a CRUD View

Attaching a workflow to a BaseCrudView is a single line. Once attached, the CRUD view handles everything — setting initial status on create, exposing available transitions in the detail view, and wiring WorkflowStatus on the frontend.

Attach the Workflow​

In your views.py, import the workflow class and assign it:

from ...packages.crud.base import BaseCrudView
from .tables import PatientTable
from .forms import PatientForm
from .workflow import PatientWorkflow

class PatientCrudView(BaseCrudView):
page_title = "Patients"
add_btn_title = "Add Patient"
table = PatientTable
form = PatientForm
workflow = PatientWorkflow # ← one line

What This Does Automatically​

BehaviourWithout workflowWith workflow
Record creationNo status seton_create_status is assigned
Detail viewNo status shownCurrent status badge shown
Available actionsOnly row actions from tableRow actions + transition buttons
Transition logNothingWorkflowTransaction record created per transition

Showing Status in the Table​

Add a StatusCol to your table class to display the current status in the list:

from ...packages.crud.table.base import ModelTable
from ...packages.crud.table.column import ModelCol, StatusCol

class PatientTable(ModelTable):
name = ModelCol(display_as="Name", sortable=True, searchable=True)
status = StatusCol(display_as="Status") # ← shows workflow status badge

class Meta:
model = Patient

StatusCol automatically reads the record's current workflow status and renders it with the colour defined in Meta.statuses.

Showing Tags in the Table​

If your workflow defines tags, add TagsCol:

from ...packages.crud.table.column import ModelCol, StatusCol, TagsCol

class PatientTable(ModelTable):
name = ModelCol(display_as="Name")
status = StatusCol(display_as="Status")
tags = TagsCol(display_as="Tags") # ← shows enabled tags

class Meta:
model = Patient

Frontend — WorkflowStatus Component​

On the frontend, WorkflowStatus renders the current status and available transition buttons for the record:

import { WorkflowStatus } from '@zango-core/crud/table';

<WorkflowStatus
apiUrl={`/patients/?object_uuid=${objectUuid}`}
onStatusChange={() => refetch()}
/>

This is included automatically in the default CrudHandler detail drawer. If you're building a custom detail page, add it explicitly.