数据库字段结构显示

根据项目需要,显示目录结构,mongodb的字段结构。

首先我给用户提供的字段名称的输入为:data.uid,type, data.resource.food 等等,通过.来分层,符合我们平时使用的条件的字段填写方式。

问题是这样的,根据我们填写的字段key,显示字段结构。

例如这里有字段:data.uid,type, data.resource.food

我想显示为:

{
    type:
    data:
        uid:
        resource:
            food:
}

我的做法,先将每一个字段通过.拆分出来,形成一个稀疏矩阵,空白的就由''填充。然后对于每一列排序,然后根据每一个层的字段名$层索引组成key,存到字段里,用于去掉重复,并同时将(字段名, 层级索引)写入一个列表,传给前端。代码如下:

max_len = 0
    two_array = []
    for f in fields:
        tmp = f.key.split('.')
        two_array.append(f.key.split('.'))
        max_len = max(len(tmp), max_len)

    # 变成个稀疏矩阵
    for x in two_array:
        print 'x_len: ', len(x)
        for i in range(max_len - len(x)):
            x.append('')

    for i in range(max_len):
        two_array = sorted(two_array, key=lambda x: x[i])

    # key只能是英文字母+.
    keys_dict = {}
    l = []
    for x in two_array:
        for i, y in enumerate(x):
            # data$0, win$1
            if y == '':
                continue
            else:
                new_key = y + '$' + str(i)
                if new_key not in keys_dict:
                    keys_dict[new_key] = i
                    l.append((y, i))
                elif keys_dict[new_key] != i:
                    l.append((y, i))
                else:
                    pass

    form = FilterForm(log_types)
    context = {'form': form, 'fields': l}

前端html代码

<div class="log-structure">
    <p>{</p>
    {% for key, len in fields %}
    <p class="log-structure-p" style="padding-left: {%  widthratio len 1 30 %}px">{{ key }}:</p>
    {% endfor %}
    <p>}</p>
</div>

感觉解决办法有点粗暴,有空再改进做法...