Skip to content

Handle deeply nested validation errorsΒ #30

@MichaelJRM

Description

@MichaelJRM

Say we have the following ValidationError with SUPPORT_MULTIPLE_EXCEPTIONS = True

{
        "parent_1": {
            "l1_attr_3": [
                [
                    ErrorDetail(
                        string="This field may not be blank.", code="blank"
                    ),
                ]
            ],
        },
        "parent_2": [
            [
                ErrorDetail(string="This field may not be blank.", code="blank"),
            ]
        ],
        "parent_3": [
            {
                "l1_attr_1": [
                    ErrorDetail(
                        string="This field may not be blank.", code="blank"
                    ),
                ],
                "l1_attr_2": [
                    ErrorDetail(
                        string="This field may not be blank.", code="blank"
                    ),
                ],
            },
            {
                "l1_attr_1": [
                    ErrorDetail(
                        string="This field may not be blank.", code="blank"
                    ),
                ],
            },
        ],
    }

The expected result is

{
    "type": "multiple",
    "code": "multiple",
    "detail": "Multiple exceptions occurred. Please check list for details.",
    "attr": None,
    "list": [
        {
            "type": "validation_error",
            "code": "blank",
            "detail": "This field may not be blank.",
            "attr": "parent_1__l1_attr_3__0",
        },
        {
            "type": "validation_error",
            "code": "blank",
            "detail": "This field may not be blank.",
            "attr": "parent_2__0",
        },
        {
            "type": "validation_error",
            "code": "blank",
            "detail": "This field may not be blank.",
            "attr": "parent_3__0__l1_attr_1",
        },
        {
            "type": "validation_error",
            "code": "blank",
            "detail": "This field may not be blank.",
            "attr": "parent_3__0__l1_attr_2",
        },
        {
            "type": "validation_error",
            "code": "blank",
            "detail": "This field may not be blank.",
            "attr": "parent_3__1__l1_attr_1",
        },
    ],
}

Instead we get this

{
    "type": "multiple",
    "code": "multiple",
    "detail": "Multiple exceptions ocurred. Please check list for details.",
    "attr": None,
    "list": [
        {
            "type": "validation_error",
            "code": "['blank']",
            "detail": "[ErrorDetail(string='This field may not be blank.', code='blank')]",
            "attr": "parent_1__l1_attr_3",
        },
        {
            "type": "validation_error",
            "code": "['blank']",
            "detail": "[ErrorDetail(string='This field may not be blank.', code='blank')]",
            "attr": "parent_2",
        },
        {
            "type": "validation_error",
            "code": "{'l1_attr_1': ['blank'], 'l1_attr_2': ['blank']}",
            "detail": "{'l1_attr_1': [ErrorDetail(string='This field may not be blank.', code='blank')], 'l1_attr_2': [ErrorDetail(string='This field may not be blank.', code='blank')]}",
            "attr": "parent_3",
        },
    ],
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions