Пользовательская проверка 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)