对于模型
class User(db.Model, BaseUser):
name = CharField()
phone = CharField()
age = IntegerField()
points = IntegerField()
以及字段列表lst = ['phone', 'name', 'points']
有没有办法让您的查询返回lst
中的字段?
我在docs中找不到一个例子,但似乎Django的ORM有...get().values(lst)
之类的东西。
我尝试将列表作为参数传递给User.select()
,但得到
TypeError: issubclass() arg 1 must be a class
我想我可以用[getattr(obj, field) for field in lst]
做一个带有结果对象的东西,但似乎应该有更好的方法吗?
更新:Django文档中values
的链接为here。
答案 0 :(得分:15)
您可以使用:
User.select(User.phone, User.name, User.points)
http://peewee.readthedocs.org/en/latest/peewee/api.html#SelectQuery
答案 1 :(得分:2)
您可以使用:
lst = [User.phone, User.name, User.points]
User.select(*lst)
我使用此方法从预定义列表中动态选择字段SELECT
。
答案 2 :(得分:1)
不确定您的问题是什么,但您是否尝试使用object_list,使用flask-peewee?
def user_query():
lst_result = User.select().where(User.name == lst.name)
return object_list('yourtemplate.html', lst_result, 'list_user')
如果没有多少帮助,我很抱歉。
问候。
答案 3 :(得分:1)
这是一个旧的,但我最近找到了答案。
给定表User的实例u,然后u._data返回字段名为键的字典。
例如:
db.connect() # db was established with connection parameters for your database
u = User.get() # get one record
print u._data # get dictionary with field names as keys
db.close() # free up your connection
答案 4 :(得分:0)
解决方法是使用tuples
或dicts
。
来自文档的元组:
stats = Stat.select(Stat.url, fn.Count(Stat.url)).group_by(Stat.url).tuples()
# iterate over a list of 2-tuples containing the url and count
for stat_url, stat_count in stats:
print stat_url, stat_count
例如来自文档的词汇:
stats = Stat.select(Stat.url, fn.Count(Stat.url).alias('ct')).group_by(Stat.url).dicts()
# iterate over a list of 2-tuples containing the url and count
for stat in stats:
print stat['url'], stat['ct']
请记住,结果是迭代器,因此如果您想要内存中的整个元组或字典,则必须使用默认方法对其进行初始化:
tuple(stats)
或dict(stats)
。
答案 5 :(得分:0)
这种数据隐藏在Model的元数据中,你可以这样访问:
User._meta.fields.keys()
如果你想要一个列表只是解析它,这将返回一个 dict_keys 对象 -> list()