Relationships

This is the official documentation of the forestadmin-agent-django and forestadmin-agent-flask Python agents.

When relationships are defined during the customization step, Forest Admin Collections act as if the 2 Collections were natively linked at the data source level.

You may have noticed that relationships within a data source are configured out of the box, so you won't need to define those.

However, you may want to create additional intra and cross data source relationships to:

  • help users navigate within your admin panel,

  • create charts that use data from multiple data sources,

  • let users filter, use scopes, or segment with conditions that cross data source boundaries.

Minimal example


agent.customize_collection("Town").add_many_to_one_relation(
    # Towns belong to 1 country
    name="country",
    foreign_collection="Country",
    foreign_key="country_id"
).add_one_to_one_relation(
    # Towns have 1 mayor
    name="myMayor",
    foreign_collection="Mayor",
    origin_key="town_id"
).add_one_to_many_relation(
    # Towns have multiple inhabitants
    name= 'inhabitants',
    foreign_collection= 'Person',
    origin_key= 'town_id'
).add_many_to_many_relation(
    # Towns electricity is supplied by power-plants which are shared with other towns
    name="energyProviders",
    foreign_collection="PowerPlant",
    through_collection="UtilityContract",
    origin_key="town_id",
    foreign_key="power_plant_id"
).add_external_relation(
    "honoraryCitizen",
    {
        "schema": {
            "firstName": "String",
            "lastName": "String"
        },
        "list_records": lambda record, context: requests.get(
            f"https://api.example.com/user/{record['id']}"
        ).json(),
    },
)

Last updated