使用PyMongo

时间:2018-06-09 17:06:23

标签: python-3.x mongodb pymongo flask-admin

这是MongoDB中完整文档的一个实例

{
    "_id" : ObjectId("5b1aa3f960600928d831f9a3"),
    "username" : "chemaP",
    "password" : BinData(0,"JDJiJDEyJFFzazBpcmIwSmZRRkttVC5NQVM3d3VzUEFDMVpwR2llYXdnVTJ3dk9mUnh3dFUyOHp3bVYu"),
    "nombre" : "chema",
    "apellidos" : "Rocha",
    "email" : "xemarr@gmail.com",
    "premium" : false,
    "admin" : true,
    "documents" : [
            {
                    "_id" : ObjectId("5b1aa40660600928d831f9a4"),
                    "filename" : "Alatriste",
                    "status" : "analyzed",
                    "viewed" : false,
                    "uploadDate" : "08-06-2018 17:43:02",
                    "metrics" : [
                            {
                                    "npunctuation" : 6,
                                    "N_words" : 6,
                                    "N_lfw" : 6,
                                    "N_cw" : 6
                            }
                    ],
                    "analysisDate" : "08-06-2018 18:00:17"
            }

注意,指标被列为一系列指标,可以添加更多具有相同指标的列表,我不介意,我只需要一个列表。

后来,当使用flask_admin-contrib.pymongo时,文件的外观&子文档就是这个。

Appearance of backend with documents &subdocuments

我不会将指标显示为嵌套的指标数组,换句话说,我想删除右边的“x”和相应的“添加指标”按钮。

以下是我的admin.py文件中的代码,该文件具有后端视图。

from flask_admin.contrib.pymongo import ModelView, filters
from flask_admin.model.fields import InlineFormField, InlineFieldList

class MetricsForm(form.Form):
    npunctuation = fields.FloatField(
        'Punctuation marks', [validators.Optional()])
    N_words = fields.FloatField('Words', [validators.Optional()])
    N_lfw = fields.FloatField('N_lfw', [validators.Optional()])
    N_cw = fields.FloatField('cw', [validators.Optional()])



class DocumentForm(form.Form):  
    filename = fields.StringField('filename')
    status = fields.StringField('status')
    viewed = fields.StringField('viewed')
    metrics = InlineFieldList(InlineFormField(MetricsForm))

我发现没有办法以嵌套数组之外的任何其他方式插入指标,我不希望这样,既不是“$ set”也不是“$ push”,也没办法将其转换为“非阵列”将显示在后端。

0 个答案:

没有答案