To open the Observation custom forms, go to the Layers panel, right‑click the observation layer, and choose Open Attribute Table from the context menu.
Tip
For further information on the custom forms, consult the documents Customized Attribute Forms in QGIS and Navigating GeoPackage Tables via Forms
Important
It is strongly recommended to create Observations through the child forms of the Datastream rather than directly from the Observation table, as this ensures that the Observation automatically receives the correct parent keys without manual selection.
A Observation does not contain any geometry. To enable editing through forms, follow the instructions provided in the document Editing Records Through a QGIS Form.
id: primary key (auto-incrementing)phenomenontime_start: DATETIME (default: today)guid_datastream: TEXT (FK)id - Primary AUTO_INCREMENT INTEGER PRIMARY KEY; it’s the required identifier for GeoPackage tables and is assigned automatically on insert.
guid - Global identifier in UUID format, stored as text. The field is optional. It’s automatically managed via triggers.
Important
On opening, the ID group is collapsed: there is no need for manual editing, as both fields are system‑managed (the id by the SQLite engine and the guid by triggers), reducing errors and ensuring identifier consistency over time.
The custom form displays only the appropriate Value control based on the selection made in the parent Datastream.
This ensures users can enter a value that matches the Datastream’s configured Result Type and related constraints.
Important
The same validation is enforced by the database engine.
Only values of the correct type—as defined in the parent Datastream—can be persisted.
This guarantees integrity even if records are inserted or modified outside the form (e.g., direct table edits or batch operations).
value of type True/False
Represent binary values (true/false).
value of type Text
Represent categorical or classified values defined within a controlled code list.
Only codes that are valid for the codespace selected in the Datastream appear in the dropdown list.
Important
For further information about codespaces and instructions on how to add them to the geopackage, please refer to the documentation of the Codelist table.
value of type Real
Used to represent integer counts or occurrences.
If range limits are defined in the parent Datastream:
value_min and value_max are present, the Value must fall within the inclusive range:
value_min ≤ value ≤ value_maxvalue_min is set → value ≥ value_minvalue_max is set → value ≤ value_maxIf no bounds are specified in the Datastream, any value of the correct type is accepted.
value of type Real
Used to represent measurable quantities associated with a numeric value and a unit of measure.
If range limits are defined in the parent Datastream:
value_min and value_max are present, the Value must fall within the inclusive range:
value_min ≤ value ≤ value_maxvalue_min is set → value ≥ value_minvalue_max is set → value ≤ value_maxIf no bounds are specified in the Datastream, any value of the correct type is accepted.
Important
Only values of the correct type—as defined in the parent Datastream—can be persisted.
This guarantees integrity even if records are inserted or modified outside the form (e.g., direct table edits or batch operations).
validtime_end > validtime_start when both provided (CHECK).result_* per parent datastream type, including NULLability, boolean domain, integer requirement for Count, and compliance with value_min/max where defined.Category, result_text must exist in codelist(id) for that datastream codespace (BEFORE INSERT/UPDATE).phenomenontime_* after INSERT/UPDATE/DELETE.For an overview of the attributes used in the custom form, refer to the Observationsite table documentation. It provides the key definitions and data types needed to correctly interpret the fields and configure the form within the data model.
For a more comprehensive overview of form‑saving workflows, refer to the detailed documentation in Saving Edits in QGIS Forms.