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)