Добавление полей по запросу в документ - PullRequest
0 голосов
/ 07 сентября 2011

говорят, что у меня есть эти документы:

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()

Когда я получаю данныеЯ вижу, что у него есть правильные столбцы, но у столбцов без столбцов есть поля от model_to_dict(column), а у dato нет атрибута geojson.

Может быть, я прошу слишком много магии для mongoengine, может быть, есть правильныйспособ справиться с этим.Есть указатель?

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

Я согласен с dcrosta - используйте DictField вместо EmbeddedDocument - у вас нет проверки на дату создания, за исключением того, что вы получаете гибкое хранилище для ваших данных, такое же как EmbeddedField.

1 голос
/ 08 сентября 2011

Эта функция еще не доступна в mongoengine.Хотя, похоже, существуют сомнения относительно этой проблемы в github

...