这是我的模特。py
class Categories(db.Model):
__tablename__ ='categories'
parent = db.Column(db.String, nullable = False)
child = db.Column(db.String)
pid = db.Column(db.Integer, primary_key = True)
def __repr__(self):
return f"Categories('{self.parent}', '{self.child}', '{self.pid}')"
def __init__(self, parent, child, id):
self.parent = parent
self.child = child
self.id = id
这是我的forms.py
existSelectParentField = QuerySelectField('Select Existing Categories',query_factory=parentcat_query, get_label= 'parent', description='Choose parent category')
这是我的查询工厂
def parentcat_query():
parentcat = session.query(db.func.count(Categories.child),
Categories.parent).group_by(Categories.parent).all()
return parentcat
但是我收到此错误,sqlalchemy.orm.exc.UnmappedInstanceError:类'sqlalchemy.util._collections.result'未映射
我想做的是显示与我的Categories.parent不同的值
我知道我必须返回一个带有查询工厂的表,而不仅仅是一个列,但在这种情况下,我要返回一个包含两列的表。
是否由于未在我的模型中映射此“新表”而导致错误?py?
有任何解决方法的建议吗?
答案 0 :(得分:0)
对于那些好奇的人,我的工作是
distinctParent = db.session.query(db.func.count(Categories.child), Categories.parent).group_by(Categories.parent).order_by(Categories.parent).all()
existSelectParentField = SelectField('Select Existing Categories', validators=[Optional()], choices=list(distinctParent))
我基本上按父类别分组,而count函数作为聚合函数。这不是最好的解决方法,因为在我的下拉菜单中,选择的ID将是计数。