Tutorial: Creating forms with Opal
In this section we walk you through creating a simple Pathway.
Your First Pathway
Pathways are an Opal
Discoverable feature -
this means that Opal will automatically load any Pathways defined in a python module
named pathways.py
inside a Django App.
Individual pathways are defined by subclassing a Pathway
class. You must set at least the
display name, and will
often want to also set a slug.
Out of the box, pathways ships with two types of pathways. A page pathway, a whole bunch of model forms on the same page, and a wizard pathway, a bunch of steps where the next step is only revealed after the step before it has been completed.
Let's look at a page pathway definition.
# yourapp/pathways.py
from opal.core import pathway
class MyPathway(pathway.PagePathway):
display_name = 'My Awesome Pathway'
slug = 'awesomest_pathway'
Taking Our First Steps
A Pathway should have at least one Step
- a section within the form.
Steps
are defined on the pathway class using the Pathway.steps
tuple.
from opal.core import pathway
from myapp import models
class SimplePathway(pathway.PagePathway):
display_name = 'A simple pathway'
steps = (
pathways.Step(model=models.PastMedicalHistory)
)
Model Steps
A common case is for steps to be simply a single Opal Subrecord
using the subrecord form template.
In fact we can simply add Opal Subrecords
to the steps
tuple to achieve the same effect.
For instance, to create a pathway with three steps to record a patient's allergies, treatment and past medical history, we could use the following:
from opal.core import pathway
from myapp import models
class SimplePathway(pathway.PagePathway):
display_name = 'A simple pathway'
slug = 'simples'
steps = (
models.Allergies,
models.Treatment,
models.PastMedicalHistory
)
Pathways is smart enough to provide a single form step pathway if the model is a singleton model, or a pathway that allows a user to edit/add/remove multiple models if its not a singleton model.
Viewing The Pathway
This pathway is then available from e.g. http://localhost:8000/pathway/#/simples
.