Core: introduction
As stated in the Architecture:
Core functionality is considered functionality that does not or very loosely tie in to particular modules. It is functionality that has meaning on its own without dependencies, but is enriched by modules.
The core really implements the “engine” of Open Forms and hides all the implementation details. It should be fairly stable, but also continually allow for new feature additions, which is a challenging task!
The following Django apps are considered core functionality:
openforms.accounts: (staff) user account managementopenforms.config: application-wide configuration and defaultsopenforms.forms: designing and building of formsopenforms.formio: integration with the form.io frontend libraryopenforms.submissions: persisting and handling of submitted form dataopenforms.variables: persisting (intermediate) data into variables for further operations
Data model
The following is a simplified relationship diagram of the Django models that relates to forms:
---
Forms model relationship
---
erDiagram
Category {
UUIDField uuid
CharField path
CharField name
}
Form {
UUIDField uuid
SlugField slug
CharField name
ForeignKey category
}
FormDefinition {
UUIDField uuid
CharField name
SlugField slug
JSONField configuration
BooleanField login_required
BooleanField is_reusable
}
FormStep {
UUIDField uuid
SlugField slug
ForeignKey form
ForeignKey form_definition
BooleanField is_applicable
}
FormVariable {
ForeignKey form
ForeignKey form_definition
TextField name
TextField key
CharField source
CharField data_type
CharField data_subtype
CharField data_format
BooleanField is_sensitive_data
JSONField initial_value
}
Form }|--|| Category : category
FormStep }|--|| Form : form
FormStep }|--|| FormDefinition : form_definition
FormVariable }|--|| Form : form
FormVariable }|--|| FormDefinition : form_definition
Each Form can have multiple FormStep’s
defined, which acts as a proxy model to a FormDefinition
(as these can be reusable across forms). The FormDefinition model
has a configuration JSON field, holding the form.io configuration.
The submissions data model mirrors this model in some way:
A
Submissionis tied to aForm.A
SubmissionStepis tied to aFormStep.A
SubmissionValueVariableis tied to aFormVariable.