从mongoengine的Document获取必填字段?

Alf*_*edN 9 python mongodb mongoengine

我希望能够获得我创建的文档所需的列表或某些字段集.例如,这是我的文件:

nickName        = StringField(required=True)
password        = StringField(required=True)
firstName       = StringField()
lastName        = StringField()
joinDate        = DateTimeField(required=True)
lastVisited     = DateTimeField(required=True)
subscriptions   = DictField(field=ObjectIdField())
isActivated     = BooleanField(default=True)
profileImage    = FileField()
isModerator     = BooleanField(default=False)
description     = StringField()
location        = GeoPointField()
email           = EmailField()
settings        = DictField()
Run Code Online (Sandbox Code Playgroud)

^从这份文件我应该收到:

["nickName","password","joinDate","lastVisited"]
Run Code Online (Sandbox Code Playgroud)

作为必填字段的结果.这可能吗?如果是这样,我怎样才能达到预期的效果.

提前致谢!

Ros*_*oss 16

您可以遍历Class._fields属性.

如果您的班级被称为用户,您可以这样做:

>>> [k for k,v in User._fields.iteritems() if v.required]
['joinDate', 'password', 'nickName', 'lastVisited']
Run Code Online (Sandbox Code Playgroud)

要根据创建获取排序列表,您可以使用创建计数器,如下所示:

>>> from operator import itemgetter
>>> required_fields = ((v.creation_counter, k) for k,v in User._fields.iteritems() if v.required)
>>> sorted_required_fields = map(itemgetter(1), sorted(required_fields, key=itemgetter(0)))
>>> sorted_required_fields
['nickName', 'password', 'joinDate', 'lastVisited']
Run Code Online (Sandbox Code Playgroud)