美文网首页
mongoengine的DictField()

mongoengine的DictField()

作者: 蒋狗 | 来源:发表于2017-03-06 22:08 被阅读0次

    py2.7
    mongoengine 0.10.5

    pop() 某些key时出现异常(同时更新3个key或以上)。不知原因。

        from mongoengine import connect, Document
        from mongoengine import StringField, DictField
    
        connect('default-db')
    
    
        class User(Document):
            # name = StringField(max_length=50, default='')  # 用户名
            properties = DictField()
    
        # User(properties={'show_1': True, 'show_2': True, 'show_3': True, 'show_4': True}).save()
        u = User.objects.all().first()
        if not u.properties:
            u.properties = {}
        print(u.properties)
    
        show_1 = 1
        show_2 = 1
        show_3 = 0
        show_4 = 1
    
    
        def __fun(attr, name, d):
            if attr:
                d[name] = True
            elif not attr and name in d:
                d.pop(name)  # error
                # d[name] = False  # ok
    
    
        __fun(show_1, 'show_1', u.properties)
        __fun(show_2, 'show_2', u.properties)
        __fun(show_3, 'show_3', u.properties)
        __fun(show_4, 'show_4', u.properties)
       
        # u.properties['show_1'] = True
        # u.properties['show_2'] = True
        # u.properties['show_4'] = True
        # u.properties.pop('show_3')  # error
    
        print(u.properties)
        
        # mongoengine.errors.OperationError: Could not save document (Cannot update 'properties' and 'properties.show_2' at the same time)
        u.save()
    

    py3.5
    mongoengine 0.11.0 正常

    相关文章

      网友评论

          本文标题:mongoengine的DictField()

          本文链接:https://www.haomeiwen.com/subject/nyfpgttx.html