【发布时间】:2016-07-01 08:02:05
【问题描述】:
我正在使用 Flask-Eve 为我的数据提供 API。我想使用 Eve 插入我的记录,以便获得 _created 属性和其他 Eve 添加的属性。
我的两个字段是字典,一个是列表。当我尝试将其插入 Eve 时,结构似乎变得扁平,丢失了一些信息。试图告诉 Eve dict & list 元素在 POST 上给我一个错误,说这些字段需要是 dicts 和列表,但它们已经是!请有人可以帮助我并告诉我我做错了什么?
我的 Eve conf 看起来像这样:
'myendpoint': { 'allow_unknown': True,
'schema': { 'JobTitle': { 'type': 'string',
'required': True,
'empty': False,
'minlength': 3,
'maxlength': 99 },
'JobDescription': { 'type': 'string',
'required': True,
'empty': False,
'minlength': 32,
'maxlength': 102400 },
},
},
但是当我使用请求发布以下结构时:
{
"_id" : ObjectId("56e840686dbf9a5fe069220e"),
"Salary" : {
"OtherPay" : "On Application"
},
"ContactPhone" : "xx",
"JobTypeCodeList" : [
"Public Sector",
"Other"
],
"CompanyName" : "Scc",
"url" : "xx",
"JobTitle" : "xxx",
"WebAdID" : "TA7494725_1_1",
"JobDescription" : "xxxx",
"JobLocation" : {
"DisplayCity" : "BRIDGWATER",
"City" : "BRIDGWATER",
"StateProvince" : "Somerset",
"Country" : "UK",
"PostalCode" : "TA6"
},
"CustomField1" : "Permanent",
"CustomField3" : "FTJOBUKNCSG",
"WebAdManagerEmail" : "xxxx",
"JobType" : "Full",
"ProductID" : "JCPRI0UK"
}
帖子如下所示:
resp = requests.post(url, data = job)
它被“扁平化”并丢失了字典和列表中的信息:
{
"_id" : ObjectId("56e83f5a6dbf9a6395ea559d"),
"Salary" : "OtherPay",
"_updated" : ISODate("2016-03-15T16:59:06Z"),
"ContactPhone" : "xx",
"JobTypeCodeList" : "Public Sector",
"CompanyName" : "Scc",
"url" : "xxx",
"JobTitle" : "xx",
"WebAdID" : "TA7494725_1_1",
"JobDescription" : "xxx",
"JobLocation" : "DisplayCity",
"CustomField1" : "Permanent",
"_created" : ISODate("2016-03-15T16:59:06Z"),
"CustomField3" : "FTJOBUKNCSG",
"_etag" : "55d8d394141652f5dc2892a900aa450403a63d10",
"JobType" : "Full",
"ProductID" : "JCPRI0UK"
}
我已经尝试更新我的架构,说有些是字典和列表:
'JobTypeCodeList': { 'type': 'list'},
'Salary': { 'type': 'dict'},
'JobLocation': { 'type': 'dict'},
但是当我在新记录中发布时,我收到一条错误消息
{u'Salary': u'must be of dict type', u'JobTypeCodeList': u'must be of list type', u'JobLocation': u'must be of dict type'},
我已经在 POST 之前验证了 type(job.Salary) == dict 等,所以我不确定如何解决这个问题。虽然我可以将记录直接发布到 MongoDB 中,但可以绕过 Eve,但如果可能的话,我更喜欢使用 Eve。
【问题讨论】: