验证mongoengine.Dictfield值的类型

时间:2015-12-15 13:15:40

标签: python mongoengine

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

import mongoengine

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

当文档即将添加到DB中时,我希望mongoengine接受它并仅在 intValuesDict 字段的值为整数且 StringsListValuesDict 的值时保存它字段是字符串列表。

示例:

对于此文档,它应该引发错误,并且文档不应保存在DB中,因为 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是整数, StringsListValuesDict中的["12", "13"]["abc", "def"] 是字符串列表:

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

解决方案是创建一个函数,在将它们保存到DB之前验证dicts值的类型,但我想知道mongoengine是否可以为我做这个。

谢谢!

1 个答案:

答案 0 :(得分:0)

Mongoengine的文档说的是 -

  

“通常,可以使用嵌入式文档而不是字典 -   通常建议这样做,因为词典不支持验证   或自定义字段类型。“

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

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