Topics - Entity selection fields
New in v13.0.0
EntityOptionField
and EntityMultiSelectField
can be used for selecting entities of given type. This will
greatly improve the speed of apps where option fields are dynamically filled with entities.
For the selection of an Entity
object, dedicated input fields can be used:
EntityOptionField
ChildEntityOptionField
SiblingEntityOptionField
EntityMultiSelectField
ChildEntityMultiSelectField
SiblingEntityMultiSelectField
When the user selects an entity with these fields, the entity will return in the params
as Entity
object.
Please have a look at sharing information between entities for more
detail on how to use an Entity
.
Child / Sibling entity selection
For example, when the entity type structure of your application looks similar to the following and you need your users
to select one of the child entities of a Project
, the ChildEntityOptionField
can be used:
ProjectFolder
└── Project
└── CPTFile
from viktor.parametrization import ViktorParametrization, ChildEntityOptionField
class ProjectParametrization(ViktorParametrization):
selected_cpt = ChildEntityOptionField('Select a CPT')
In case multiple entities should be selectable, the ChildEntityMultiSelectField
can be used. Similarly,
siblings entities can be selected by using the SiblingEntityOptionField
.
Generic entity selection
In some cases, both the ChildEntityOptionField
and SiblingEntityOptionField
may not be sufficient because the
entities you need to select are in a different part of the entity type tree. In the following example, we want to
select a CPTFile
entity in the Foundation
entity type:
ProjectFolder
└── Project
├── CPTFolder
│ └── CPTFile
└── Foundation
We can make use of the EntityOptionField
and the entity_type_names
attribute to filter which entity type(s)
should be selectable:
from viktor.parametrization import ViktorParametrization, EntityOptionField
class FoundationParametrization(ViktorParametrization):
selected_cpt = EntityOptionField('CPT File', entity_type_names=['CPTFile'])
Or use the EntityMultiSelectField
when multiple entities should be selected: