验证 mongoengine.Dictfield 值的类型

Validate the type of mongoengine.Dictfield values

我有一个这样的自定义文档:

import mongoengine

class MYDOC(mongoengine.Document):
  ...
  intValuesDict = mongoengine.DictField()
  StringsListValuesDict = mongoengine.DictField()
  ...

当一个文档要添加到数据库中时,我希望mongoengine接受它并仅当intValuesDict字段的值为整数且[=37的值时才保存它=]StringsListValuesDict 字段是字符串列表。

示例:

对于此文档,它应该引发错误并且文档不应保存在数据库中,因为 StringsListValuesDict 的值不是字符串列表([12, 13] ).

{
  ...
  intValuesDict: {
                   "key1": 12,
                   "key2": 13
                 }
  StringsListValuesDict: {
                   "key_1": [12, 13],
                   "key_2": ["abc", "def"]
                 }
  ..
}

这个也是错误的,因为 intValuesDict 的值不是整数 ("12"):

{
  ...
  intValuesDict: {
                   "key1": "12",
                   "key2": 13
                 }
  StringsListValuesDict: {
                   "key_1": ["12", "13"],
                   "key_2": ["abc", "def"]
                 }
  ..
}

应该接受并保存此文档,因为 intValuesDict 中的 1213 是整数,而 ["12", "13"]["abc", "def"]来自 StringsListValuesDict 的是字符串列表:

{
  ...
  intValuesDict: {
                   "key1": 12,
                   "key2": 13
                 }
  StringsListValuesDict: {
                   "key_1": ["12", "13"],
                   "key_2": ["abc", "def"]
                 }
  ..
}

一个解决方案是创建一个函数来验证字典值的类型,然后再将它们保存到数据库中,但我想知道 mongoengine 是否可以为我做这个。

谢谢!

Mongoengine 文档说的是 -

"Often, an embedded document may be used instead of a dictionary – generally this is recommended as dictionaries don’t support validation or custom field types."

我认为你应该研究一下 Mongo DB Document validation

最好的想法是编写自定义验证函数。它应该覆盖文档的 clean 方法。如果您的输入数据不适合您 - 只需提高 ValidationError。这是一个 example.