2012-12-13 74 views
1

我正在使用Flask-MongoAlchemy作为个人项目。我有一些.cfg输入文件,我想解析并制作成mongodb文档条目。不幸的是,.cfg文件是平坦的,我想从每个文件中创建多个不同的文档。我想在一个地方定义我想要使用的结构(在单独的.cfg文件中),1)在解析输入文件的同时将输入文件转换为这种格式,以及2)使用此结构创建MongoAlchemy文档类。我只有在#2时遇到麻烦,但我愿意接受解决这两个目标的其他实现。在Flask-MongoAlchemy中创建动态文档

这是我的输入.cfg文件。我想将其制作成多个mongodb文档。

[foo] 
a = val1 
b = val2 
c = val3 
d = val4 

这里是定义结构的documents.cfg。这些值是用于区分类型的数字。

[foo] 
    [[bar]] 
    a = 1 
    b = 1 
    [[baz]] 
    c = 2 
    d = 1 

下面是类定义

class Bar(db.Document): 
    # add class attributes from kwargs 
    @classmethod 
    def init(cls, **kwargs): 
     for k, v in kwargs.items(): 
      if v == 1: 
       setattr(cls, k, db.IntField(min_value=0)) 

class Baz(db.Document): 
    # add class attributes from kwargs 
    @classmethod 
    def init(cls, **kwargs): 
     for k, v in kwargs.items(): 
      if v == 1: 
       setattr(cls, k, db.IntField(min_value=0)) 
      elif v == 2: 
       setattr(cls, k, db.StringField()) 

我解析documents.cfg创建两个类型的字典:

bar_dict = {'a': '1', 'b': '1'} 
baz_dict = {'c': '2', 'd': '1'} 

我然后传递这些到相应的init()方法

Bar.init(**bar_dict) 
Baz.init(**baz_dict) 

这次成功完全添加属性。但是,当创建一个Bar(或Baz)的实例时,我得到这个错误。

mongoalchemy.exceptions.ExtraValueException: a 

我的猜测是,这与MongoAlchemy字段应该是类属性而不是实例属性有关。任何帮助?

回答

0
class Bar(db.Document): 
    config_extra_fields = 'ignore' 
    ... 

class Baz(db.Document): 
    config_extra_fields = 'ignore' 
    ...