无法获得不同的值以显示在我的QuerySelectField中-Flask

时间:2019-01-07 01:54:00

标签: python flask sqlalchemy flask-sqlalchemy flask-wtforms

这是我的模特。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?

有任何解决方法的建议吗?

1 个答案:

答案 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将是计数。