2011-09-07 81 views
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要求太多的魔法,可能是有一個正確的方法來解決這個問題。 任何指針?

回答

1

此功能在mongoengine中尚未推出。 雖然似乎有關於this issue in github

+1

Mongoengine有一個'DictField',你可以在其中存儲任何你想要的東西。儘管如此,您必須將其作爲字典訪問,並帶有方括號。 – dcrosta

+0

我不明白你的意思是「分組領域」 – dcrosta

2

我同意dcrosta dicussion - 使用DictField代替EmbeddedDocument的 - 你對創建日期沒有驗證,比你得到一個靈活的商店爲您的數據等,同一個嵌入式字段。