Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 验证mongoengine.Dictfield值的类型_Python_Mongoengine - Fatal编程技术网

Python 验证mongoengine.Dictfield值的类型

Python 验证mongoengine.Dictfield值的类型,python,mongoengine,Python,Mongoengine,我有这样一个自定义文档: import mongoengine class MYDOC(mongoengine.Document): ... intValuesDict = mongoengine.DictField() StringsListValuesDict = mongoengine.DictField() ... 当文档即将添加到数据库中时,我希望mongoengine仅当intValuesDict字段的值是整数且StringsListValuesDict字段的值是

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

import mongoengine

class MYDOC(mongoengine.Document):
  ...
  intValuesDict = mongoengine.DictField()
  StringsListValuesDict = mongoengine.DictField()
  ...
当文档即将添加到数据库中时,我希望mongoengine仅当intValuesDict字段的值是整数且StringsListValuesDict字段的值是字符串列表时才接受并保存它

示例:

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

由于intValuesDict的值不是整数(
“12”
),因此此值也会出错:

应接受并保存此文档,因为intValuesDict中的
12
13
是整数,而
[“12”,“13”]
[“abc”,“def”]
是字符串列表:

{
  ...
  intValuesDict: {
                   "key1": 12,
                   "key2": 13
                 }
  StringsListValuesDict: {
                   "key_1": ["12", "13"],
                   "key_2": ["abc", "def"]
                 }
  ..
}
一个解决方案是创建一个函数,在将dicts值保存到DB之前验证dicts值的类型,但我想知道mongoengine是否可以帮我做到这一点


谢谢

Mongoengine医生说的是-

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

我想你应该调查一下

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

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