循环遍历mongoengine文档中所有字段的方法,并检查每个字段是否为特定类型和is_required

时间:2015-06-17 21:47:32

标签: python mongodb mongoengine

以下是使用mongoengine的文档中的一些字段

_id     = f.ObjectIdField(db_field="i", required=True)
name    = f.StringField(db_field="n")

我想循环遍历Document中的每个字段,看看它们是否为XField类型且is_required为True,有没有办法做到这一点?

我知道您可以使用_fields

列出所有字段

但是

for field in SomeDocument._fields:
    print type(field) # always return 'str' not 'StringField' or 'ObjectField'

    # Don't know how to check is_required

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:4)

你可以简单地使用这个

field_dict = SomeDocument.get_fields_info()
for field_name, field in field_dict.iteritems():
    print field_name, field.required, field.__class__

答案 1 :(得分:0)

您遇到的问题是SomeDocument._fields是一个字典,因此迭代它会给您键(字符串)。例如,如果您有一个字段foo,则可以执行SomeDocument._fields['foo'].required。当然,你可以这样做:

for field in SomeDocument._fields:
    print '{} {} required.'.format(SomeDocument._fields[field], 'is' if SomeDocument._fields[field].required else 'is not')