根据需要向文档添加字段

时间:2011-09-07 14:24:21

标签: django mongodb mongoengine

说我有这些文件:

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要求太多魔力,可能有正确的方法来解决这个问题。 任何指针?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

此功能尚未在mongoengine中提供。 虽然似乎有关于this issue in github

的讨论