Python flask - моноинженерная модель встроенных документов - PullRequest
0 голосов
/ 02 апреля 2020

Попытка построить встроенную модель, которая будет встраивать свою собственную модель в два свойства. Отправляемый json может выглядеть следующим образом (хотя может иметь много дополнительных встроенных уровней):

{ 
    "_id": "z00ty6767", 
    "name": "Inverted Data Search", 
    "params": { 
        "command_options": "" 
    }, 
    "sequence": { 
        "action": "search", 
        "params": { 
            "variable": "RTX",
            "var_type": "Inventory"
            "step": "1" 
        }, 
        "true": { 
            "action": "review", 
            "params": { 
                "value": "EE175",
                "step": "2"
            }, 
            "true": { 

                "action": "sort", 
                "params": { 
                    "step": "3", 
                    "variable": "pack_date", 
                    "condition": "oreder_by", 
                    "value": "oldest" 
                }, 
                "true": { 
                    "action": "end" 
                }, 
                "false": { 
                    "action": "end" 
                } 

            }, 
            "false": { 
                "action": "end" 
            } 
        }, 
        "false": { 
            "action": "end" 
        } 
    } 
}

Попытка построить модели таким способом, но при этом появляется ошибка, что SequenceModel не существует.

from db import db

class ParameterModel(db.EmbeddedDocument):
    variable = db.StringField()
    var_type = db.StringField()
    condition = db.StringField()
    value = db.StringField()
    step = db.StringField()


class SequenceModel(db.EmbeddedDocument):
    action = db.StringField()
    params = db.EmbeddedDocumentField(ParameterModel)
    true = db.EmbeddedDocumentField(SequenceModel)
    false = db.EmbeddedDocumentField(SequenceModel)


class Sequences(db.Document):
    _id = db.StringField()
    name = db.StringField()
    params = db.EmbeddedDocumentField(ParameterModel)
    sequence = db.EmbeddedDocumentField(SequenceModel)

Я попытался использовать GenericEmbedddedDocumentField для полей true и false и смог успешно выполнить GET для существующих документов, но получил KeyError: _cls при попытке выполнить POST.

I успешно строил явные модели для каждого шага, но надеялся, что есть лучший программный способ решить эту проблему. Спасибо!

...