我有一个像这样的自定义文档:
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 中的12
和13
是整数, StringsListValuesDict中的["12", "13"]
和["abc", "def"]
是字符串列表:
{
...
intValuesDict: {
"key1": 12,
"key2": 13
}
StringsListValuesDict: {
"key_1": ["12", "13"],
"key_2": ["abc", "def"]
}
..
}
解决方案是创建一个函数,在将它们保存到DB之前验证dicts值的类型,但我想知道mongoengine是否可以为我做这个。
谢谢!
答案 0 :(得分:0)
Mongoengine的文档说的是 -
“通常,可以使用嵌入式文档而不是字典 - 通常建议这样做,因为词典不支持验证 或自定义字段类型。“
我认为你应该研究Mongo DB Document validation
最好的想法可能是编写自定义验证功能。它应该覆盖您的文档的clean
方法。如果您的输入数据不适合您 - 只需提高ValidationError
即可。这是一个example。