本文整理匯總了Python中mongoengine.fields.DictField方法的典型用法代碼示例。如果您正苦於以下問題:Python fields.DictField方法的具體用法?Python fields.DictField怎麽用?Python fields.DictField使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類mongoengine.fields
的用法示例。
在下文中一共展示了fields.DictField方法的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: test_field_options
# 需要導入模塊: from mongoengine import fields [as 別名]
# 或者: from mongoengine.fields import DictField [as 別名]
def test_field_options(self):
class TestSerializer(DocumentSerializer):
class Meta:
model = FieldOptionsModel
fields = '__all__'
expected = dedent("""
TestSerializer():
id = ObjectIdField(read_only=True)
required_field = IntegerField(required=True)
int_null_field = IntegerField(allow_null=True, required=False)
string_null_field = CharField(allow_blank=True, allow_null=True, required=False)
required_list_field = ListField(allow_empty=False, child=IntegerField(required=False), required=True)
non_required_list_field = ListField(child=IntegerField(required=False), required=False)
required_dict_field = DictField(allow_empty=False, required=True)
choices_field = ChoiceField(choices=(('red', 'Red'), ('blue', 'Blue'), ('green', 'Green')), required=False)
length_limit_field = CharField(max_length=12, min_length=3, required=False)
value_limit_field = IntegerField(max_value=12, min_value=3, required=False)
decimal_field = DecimalField(decimal_places=4, max_digits=8, max_value=9999, required=False)
""")
assert repr(TestSerializer()) == expected
示例2: test_basic
# 需要導入模塊: from mongoengine import fields [as 別名]
# 或者: from mongoengine.fields import DictField [as 別名]
def test_basic(self):
class TestSerializer(DocumentSerializer):
class Meta:
model = BasicCompoundDoc
fields = '__all__'
expected = dedent("""
TestSerializer():
id = ObjectIdField(read_only=True)
list_field = ListField(required=False)
int_list_field = ListField(child=IntegerField(required=False), required=False)
dict_field = DictField(required=False)
int_dict_field = DictField(child=IntegerField(required=False), required=False)
int_map_field = DictField(child=IntegerField(required=False), required=False)
""")
assert repr(TestSerializer()) == expected
示例3: build_compound_field
# 需要導入模塊: from mongoengine import fields [as 別名]
# 或者: from mongoengine.fields import DictField [as 別名]
def build_compound_field(self, field_name, model_field, child_field):
if isinstance(model_field, me_fields.ListField):
field_class = drf_fields.ListField
elif isinstance(model_field, me_fields.DictField):
field_class = drfm_fields.DictField
else:
return self.build_unknown_field(field_name, model_field.owner_document)
field_kwargs = get_field_kwargs(field_name, model_field)
field_kwargs.pop('model_field', None)
if child_field is not None:
field_kwargs['child'] = child_field
return field_class, field_kwargs
示例4: test_nested
# 需要導入模塊: from mongoengine import fields [as 別名]
# 或者: from mongoengine.fields import DictField [as 別名]
def test_nested(self):
class TestSerializer(DocumentSerializer):
class Meta:
model = NestedCompoundDoc
fields = '__all__'
expected = dedent("""
TestSerializer():
id = ObjectIdField(read_only=True)
dict_list_field = ListField(child=DictField(required=False), required=False)
list_dict_field = DictField(child=ListField(required=False), required=False)
list_dict_list_field = ListField(child=DictField(child=ListField(required=False), required=False), required=False)
""")
assert repr(TestSerializer()) == expected
示例5: recursive_save
# 需要導入模塊: from mongoengine import fields [as 別名]
# 或者: from mongoengine.fields import DictField [as 別名]
def recursive_save(self, validated_data, instance=None):
"""
Recursively traverses validated_data and creates EmbeddedDocuments
of the appropriate subtype from them.
Returns Mongonengine model instance.
"""
# me_data is an analogue of validated_data, but contains
# mongoengine EmbeddedDocument instances for nested data structures
# instead of OrderedDicts.
#
# For example:
# validated_data = {'id:, "1", 'embed': OrderedDict({'a': 'b'})}
# me_data = {'id': "1", 'embed': <EmbeddedDocument>}
me_data = dict()
for key, value in validated_data.items():
try:
field = self.fields[key]
# for EmbeddedDocumentSerializers, call recursive_save
if isinstance(field, EmbeddedDocumentSerializer):
me_data[key] = field.recursive_save(value) if value is not None else value # issue when the value is none
# same for lists of EmbeddedDocumentSerializers i.e.
# ListField(EmbeddedDocumentField) or EmbeddedDocumentListField
elif ((isinstance(field, serializers.ListSerializer) or
isinstance(field, serializers.ListField)) and
isinstance(field.child, EmbeddedDocumentSerializer)):
me_data[key] = []
for datum in value:
me_data[key].append(field.child.recursive_save(datum))
# same for dicts of EmbeddedDocumentSerializers (or, speaking
# in Mongoengine terms, MapField(EmbeddedDocument(Embed))
elif (isinstance(field, drfm_fields.DictField) and
hasattr(field, "child") and
isinstance(field.child, EmbeddedDocumentSerializer)):
me_data[key] = {}
for datum_key, datum_value in value.items():
me_data[key][datum_key] = field.child.recursive_save(datum_value)
# for regular fields just set value
else:
me_data[key] = value
except KeyError: # this is dynamic data
me_data[key] = value
# create (if needed), save (if needed) and return mongoengine instance
if not instance:
instance = self.Meta.model(**me_data)
else:
for key, value in me_data.items():
setattr(instance, key, value)
if self._saving_instances:
instance.save()
return instance