class Foo(Model):
bar = CharField()
baz = CharField()
class Meta:
database = db
<body>
Create a new Foo:
<input type="text" name="bar" />
<input type="text" name="baz" />
</body>
我希望能够在运行时确定模型中字段的名称,数据类型和其他元数据,并将它们传递给html模板,而不是对html中的输入字段进行硬编码。循环过来。
答案 0 :(得分:3)
你可以Model._meta.fields
:
In [1]: from peewee import *
In [2]: class User(Model):
...: username = CharField()
...:
In [3]: User._meta.fields
Out[3]:
{'id': <peewee.PrimaryKeyField at 0x2eba290>,
'username': <peewee.CharField at 0x2eb4e10>}
答案 1 :(得分:0)
>>> x = [v for k,v in vars(Foo).items() if isinstance(v, peewee.FieldDescriptor)]
>>> for i in x:
... print(i.att_name, i.field)
...
('bar', <peewee.CharField object at 0x022AC810>)
('baz', <peewee.CharField object at 0x022AC6B0>)
('id', <peewee.PrimaryKeyField object at 0x022B4CD0>)
这利用了Python内置vars
生成类FieldDescriptor
所拥有的Foo
个对象的列表。请注意,我们直接对Foo
类型对象进行操作,从 class 变量中获取此信息。
一旦我们拥有了所有字段,我们就可以遍历它们并检查列名称和类型。最有可能的是,您需要对isinstance
进行某种field
检查,以确定要在HTML中使用的类型。我想你会过滤掉或忽略PrimaryKeyField
,但我认为你可以解决这个问题。