2016-03-12 1 views
0

Я пытаюсь применить пользовательскую проверку на modify операции 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)