Polymorphic relationships
This is the official documentation of the forestadmin-agent-django
and forestadmin-agent-flask
Python agents.
Enable polymorphic support
Forest admin can interact with polymorphic relations by enabling the polymorphic
option on the datasource instance.
Because Django usea a foreign key to django_content_type
and Forest requires a string field for the type field, an enum field will automatically be created to replace the relationship to django_content_type
. This enum field will have enum one entry per reverse relation declared with django.contrib.contenttypes.fields.GenericRelation
.
Tips
The id field
and the type field
(along with the foreign key to django_content_type
) of the relationship are still shown. You can use them to create segment, hide them from the agent or through the front-end configuration.
Limitations
Collections
Remove collection
When using the remove collection customization, it's important to note a limitation regarding collections that are potential targets of polymorphic relationships. If you attempt to delete a collection that is referenced in a polymorphic relationship, an exception will be thrown with the following message:
This limitation exists to prevent corruption of data relationships that depend on this collection in a polymorphic context. Before attempting deletion, ensure that the collection you want to delete is not used as a target in such a relationship before attempting the deletion.
Rename Collection
The rename collection customization also imposes a restriction on collections involved in polymorphic relationships. If you attempt to rename a collection that is the target of a polymorphic relationship, an exception will be thrown with the following message:
This limitation ensures the integrity of polymorphic relationships in your data model. Before renaming a collection, verify that it is not involved in such polymorphic relationships to avoid errors.
Fields
Remove field
When using the remove field customization, it's important to note a limitation concerning fields involved in the polymorphic relationships (foreign_key_type
and foreign_key_id
). If you attempt to delete a field that is used in a polymorphic relationship, an exception will be thrown with the following message:
This limitation is in place to ensure the proper functioning of the polymorphic relationship. Before deleting a field, ensure that the field you want to delete is not used as a foreign key or type field in any polymorphic relationship.
Rename field
When using the rename field customization, it's important to be aware of a limitation concerning fields involved in polymorphic relationships (foreign_key_type
and foreign_key_id
). If you attempt to rename a field that is used in a polymorphic relationship, an exception will be thrown with the following message:
This limitation is in place to ensure the proper functioning of polymorphic relationship. Before renaming a field, ensure that the field you want to rename is not used as a as foreign key or type field of a polymorphic relationship.
Computed field
When using computed fields, a list of dependency
fields is required. Theses fields can travels '*toOne' relationships using ':'. However, due to the unpredictable target collection of polymorphic relationship, they cannot be used as dependencies for computed fields; an error will be thrown with the following message:
Another limitation exists with computed fields when they are used as reference field
. Due to the unpredictable target collection of the polymorphic relationships, computed fields cannot be evaluated over polymorphic relations. If used as a reference field, it will not be displayed on the front-end.
When computed fields are not evaluated over polymorphic relationships, a debug
log is generated with the following message:
Search (extended)
When searching within a collection that contains a polymorphic relationship, extended searches will not search through the polymorphic relationships. This behavior is designed to prevent excessive resource consumption and delays in SQL queries. A debug
log will appear to alert you about this behavior with the following message:
And a link leading to the replace search documentation. If you understand the implications and still want to search through polymorphic relations, you can follow the replace search documentation to override the default search behavior.
Last updated