Skip to content

_instance not set for ListField(EmbeddedDocument()) #660

@jtushman

Description

@jtushman

Use case:

class Requirement(EmbeddedDocument):
    meta = {'allow_inheritance': True}

    satisfied = BooleanField(default=False)

    def test(self):
        raise NotImplementedError

requirements = ListField(EmbeddedDocumentField(Requirement))

My current patch is as follows:

        # in def BaseField#__set__(self, instance, value):
        EmbeddedDocument = _import_class('EmbeddedDocument')
        if isinstance(value, EmbeddedDocument) and value._instance is None:
            value._instance = weakref.proxy(instance)

        #####################
        ## BEGIN MODIFICATION
        #####################
        if isinstance(value, list):
            for item in value:
                if isinstance(item, EmbeddedDocument) and item._instance is None:
                    item._instance = weakref.proxy(instance)
        ######################
        ## END MODIFICATION
        ######################

But do not love that I need to inspect every member that could be a list. What do you think?

But if you like this approach -- I can make a proper PR. But open to other approaches.

Thanks for the great library

-- jonathan

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