Python 在peewee模型中动态定义字段

Python 在peewee模型中动态定义字段,python,peewee,Python,Peewee,这项工作: class MyModel(peewee.Model): my_field = peewee.IntegerField(null=False, default=0) class Meta(object): database = db db_table = 'MyTable' 这不起作用: class MyModel(peewee.Model): class Meta(object): database =

这项工作:

class MyModel(peewee.Model):
    my_field = peewee.IntegerField(null=False, default=0)

    class Meta(object):
        database = db
        db_table = 'MyTable'
这不起作用:

class MyModel(peewee.Model):

    class Meta(object):
        database = db
        db_table = 'MyTable'

setattr(MyModel, 'my_field', peewee.IntegerField(null=False, default=0))
我想这是由于在
peewee.Model
中使用了一些元类魔法造成的。事实上,我在模型的
\u meta.fields
中看不到它


动态定义字段的好方法是什么?

调用
add\u to\u class
,而不是setattr:

my_field = peewee.IntegerField(null=False, default=0)
my_field.add_to_class(MyModel, 'my_field_name')

# Now this works:
MyModel.my_field_name

这篇文章只是为了突出Peewee 3给出的正确答案。?(于2020年5月18日测试)

以下代码将成功执行:

class Note(Model):
    note_id = AutoField()
fields=('nx', 'ny', 'nz')
for f in fields:
    Note._meta.add_field(f, TextField(null=False))

Peewee的模块显然可以用来完成同样的事情,但我没有尝试过。

显然现在是:
Model.\u meta.add\u field(field\u name,field)