使用Mongoengine和Pyramid将数据保存到嵌入式文档的正确方法是什么?

否定

我确定我遗漏了某些东西,因为我无法获取Mongoengine/Pyramid保存嵌入式文档。我有以下几点:

class Job_history(DynamicEmbeddedDocument):
    job_title = StringField()
    from_ = DateTimeField()
    to_ = DateTimeField()           


class Candidates(Document):

    first_name = StringField(required=True)
    second_name = StringField()
    surname = StringField(required=True)
    id_number = StringField(primary_key=True, required=True)
    id_type = StringField()
    id_nationality = StringField()
    home_number = StringField()
    mobile_number = StringField(required=True)
    email = EmailField(required=True)
    notice_period = StringField()
    date_of_entry = ComplexDateTimeField()
    city_town = StringField()
    province = StringField()
    postal_code = StringField()
    country = StringField()

    job_history = ListField(EmbeddedDocumentField(Job_history))

    meta = {"indexes": ["id_number", "mobile_number", 'province', 'email', 'postal_code']}

当我尝试将数据保存到时Candidates,出现以下错误:

ValidationError: ValidationError (Candidates:9109205021082) (Invalid embedded document instance provided to an EmbeddedDocumentField: ['job_history'])
                                              ^    ^    ^
                                       this is the id_number field

我从HTML表单中获取了要保存的数据,我像这样处理这些数据:

@view_config(name='edit', renderer="json", request_method='POST')
    def modify(self):
        params = self.request.params        
        print params
        self.context.first_name = params.get('first_name')
        self.context.second_name = params.get('second_name')
        self.context.surname = params.get('surname')
        self.context.id_number = params.get('id_number')
        self.context.id_type = params.get('id_type')
        self.context.id_nationality = params.get('id_nationality')
        self.context.home_number = params.get('home_number')
        self.context.mobile_number = params.get('mobile_number')
        self.context.email = params.get('email')
        self.context.city_town = params.get('city_town')
        self.context.province = params.get('province')
        self.context.postal_code = params.get('postal_code')
        self.context.country = params.get('country')

        self.context.from_ = params.get("from[]") #embedded document field
        self.context.to_ = params.get("to[]")     #embedded document field
        self.context.industries = params.get("industries[]")    #embedded document field
        can_id = Candidates.objects(id_number=self.context.id_number)

        from_list = []   
        to_list= []     
        job_title_list = []
        industries_list = []
        for k, v in params.iteritems():
            if k == "industries[]":
                industries_list.append(v)
        for k, v in params.iteritems():
            if k == "to[]":
                to_list.append(v)        
        for k, v in params.iteritems():
            if k == "from[]":
                from_list.append(v)
        for k, v in params.iteritems():
            if k == "job_title[]":
                job_title_list.append(v)

        self.context.job_history = [[j,f,t] for j,f,t in zip(job_title_list, from_list, to_list)] # add the embedded document fields into to a list   

        try:
            self.context.save() # try to save to `Candidates`
            print self.context
            self.request.session.flash({"text": "Success!", "type": "success", "heading": "Success"})
        except:            
            self.request.session.flash({"text": "Database error", "type": 'danger', "heading": ""})

        candidate_url = self.request.route_url('candidates', id_number=self.context.id_number, traverse="edit")
        return

此处显示的代码已缩短。

我想念什么?还是我做错了什么?

汤姆·威利斯

只需通过mongoengine上的api文档即可。您的架构定义了Job_history文档的数组。因此,与其从列表理解中的表单输入中创建3个项目元组的列表,不如创建一个zip函数产生的Job_history实例。

self.context.job_history = [Job_history(job_title=j, from_=f, to_=t) for j,f,t in zip(job_title_list, from_list, to_list)]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Mongoengine REST将数据发布到嵌入式文档

在Django,Python中使用MongoEngine查询嵌入式文档

更新嵌入式Mongo文档-Mongoengine

嵌入式文档的数组元素的$ set的正确语法是什么?

嵌入式HSQLDB将数据持久保存到文件中

将嵌入式HSQL数据库保存到文件

Mongoengine-仅保存一个嵌入式文档

MongoEngine:从嵌入式文档获取父文档

清理嵌入式仪表板的正确方法是什么

使用Flurl将流响应发布并保存到文件的正确方法是什么

我的嵌入式数据库位置是什么

如何使用mongoDB和spring数据在嵌入式文档中创建id

对于整个MongoDB集合,将嵌入式文档的字段放在其父级中的最有效方法是什么?

嵌入式系统中替换strcmp sscanf和sprintf的方法是什么?

查询MongoEngine中的嵌入式文档列表

MongoEngine中嵌套的嵌入式文档的验证错误

保存对象ID或嵌入式文档?

使用Mongoengine通过正则表达式匹配嵌入式文档

如何使用vb.net将嵌入式项目资源(Excel工作表)保存到用户的桌面

用Maven使用嵌入式JRE构建项目的可行方法是什么?

何时使用嵌入式文档MongoDB

如何通过VBA将Powerpoint 2013中的嵌入式图像保存到本地磁盘?

在iOS应用中将少量数据保存到磁盘的最正确方法是什么?

无法保存到嵌入式资源中的XML文件

调试信息“嵌入式”和“便携式”,它们的作用是什么?

使用 PDFBox 解析器从 PDF 中提取嵌入式 Flash 文件的最佳方法是什么?

将现有的mongodb数据更新为嵌入式文档

Mongoid嵌套嵌入式文档保存忽略查询

保存前如何验证嵌入式文档?