0

说我有这些文件:

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 时,我看到它具有正确的列,但是没有列具有来自的字段,model_to_dict(column)并且 dato 没有属性 geojson。

可能是我对 mongoengine 要求太多魔法,可能有适当的方法来解决这个问题。任何指针?

4

2 回答 2

2

我同意 dcrosta - 使用 DictField 而不是 EmbeddedDocument - 您对创建日期没有任何验证,除了您获得灵活的数据存储,与 EmbeddedField 相同。

于 2011-09-09T12:56:32.477 回答
1

此功能在 mongoengine 中尚不可用。虽然在 github上似乎有关于这个问题的讨论

于 2011-09-08T13:28:05.857 回答