Пользовательская проверка Mongoengine с изменением

Я пытаюсь применить пользовательскую проверку к операции изменения Mongoengine, как показано ниже:

class Form(Document):

    fields = ListField(EmbeddedDocumentField(Field))

    def modify(self, *args, **kwargs):
        for field in self.fields:
            if not [field for field in self.fields if field.type == "email"]:
                raise ValidationError("Form must have an email field")

        super(Form, self).modify(**kwargs)

     def update_form(self, modify_kwargs):
         return self.modify(**modify_kwargs)

Однако, когда я звоню update_formпользовательская проверка не учитывает обновленные данные в modify, Есть ли какая-то предварительная ловушка для выполнения этого типа проверки?

1 ответ

Решение

Вы проверяете по атрибуту поля объектов, а не по kwargs. Но убедитесь, что каждое поле является объектом, который содержит.type. Вы не должны использовать зарезервированный тип слова Python.

class Form(Document):

fields = ListField(EmbeddedDocumentField(Field))

def modify(self, *args, **kwargs):
     if not [field for field in kwargs.get('fields', []) if field.type == "email"]:
         raise ValidationError("Form must have an email field")

    super(Form, self).modify(**kwargs)

 def update_form(self, modify_kwargs):
     return self.modify(**modify_kwargs)
Другие вопросы по тегам