说我有这些文件:
from mongoengine import Document, EmbeddedDocument, fields
import datetime
class EmbeddedColumn(EmbeddedDocument):
created = fields.DateTimeField(default=datetime.datetime.now)
class Dattum(Document):
datasource_id = fields.IntField(required=True)
date_modified = fields.DateTimeField(default=datetime.datetime.now)
point = fields.GeoPointField()
columns = fields.ListField(fields.EmbeddedDocumentField(EmbeddedColumn))
在运行时,我需要根据一系列查询为某些实例添加一些字段:
for row in csv_attach:
dato = Dattum(datasource_id=datasource.pk)
for column in columns:
col_dict = model_to_dict(column)
col_dict.pop('id')
ecol = EmbeddedColumn(**col_dict)
dato.columns.append(ecol)
if ecol.geodata_type=='point':
local_search = gmaps.local_search('%s %s' %(ecol.value, region))
results = local_search['responseData']['results']
result_len =
if len(results) == 1:
result = results[0]
#dato.point(result['lat'], result['lng'])
dato.geojson = geojson.Point(dato.point)
dato.save()
当我检索一些Dattum时,我看到它有正确的列,但是no列包含来自model_to_dict(column)
的字段,而dato没有属性geojson。
可能是我对mongoengine要求太多魔力,可能有正确的方法来解决这个问题。 任何指针?
答案 0 :(得分:2)
我同意dcrosta - 使用DictField而不是EmbeddedDocument - 您在创建日期没有验证,除了您获得灵活的数据存储,与EmbeddedField相同。
答案 1 :(得分:1)
此功能尚未在mongoengine中提供。 虽然似乎有关于this issue in github
的讨论