float()参数必须是字符串或数字,而不是'Float'

时间:2020-01-06 17:55:24

标签: python graphene-python graphene-sqlalchemy

我知道之前曾有人问过这个问题,但所有问题都没有帮助,因此再问一次。

我正在使用石墨烯并解析一些Elasticsearch数据,然后再将其传递给石墨烯

PFB:-我已解决的功能

def resolve_freelancers(self, info):
    session = get_session()
    [ids, scores] = self._get_freelancers()
    freelancers = session.query(FreelancerModel).filter(FreelancerModel.id.in_(ids)).all()

    for index in range(len(ids)):
        print("index", scores[index])
        freelancers[index].score = scores[index]

    if self.sort:
        reverse = self.sort.startswith("-")
        self.sort = self.sort.replace("-", "")
        if self.sort == "alphabetical":
            freelancers = sorted(freelancers, key=lambda f: f.name if f.name else "", reverse=reverse)
        if self.sort == "created":
            freelancers = sorted(freelancers, key=lambda f: f.created_on, reverse=reverse)
        if self.sort == "modified":
            freelancers = sorted(freelancers, key=lambda f: f.modified_at, reverse=reverse)
    freelancers = [Freelancer(f) for f in freelancers[self.start:self.end]]
    session.close()
    return freelancers

现在可以了

print(freelancers[index].score)

它给了我10.989184,它的类型是<class 'float'>

在我的class Freelancer(graphene.ObjectType):

我添加了score = graphene.Float()

现在,当我尝试向查询中添加score时出现错误..否则就没有问题..我唯一感兴趣的是在json响应中获取该得分值..我不明白导致此错误的原因是什么,我对Python还是很陌生,所以请多多指教。

请随时询问其他代码或信息,因为我尝试粘贴我认为相关的任何内容

2 个答案:

答案 0 :(得分:0)

所以我无法发表评论,或者我会发表评论,我很可能是错的,但这是可行的。

我的猜测是您正在调用float(score)的某个地方,但是graphene.Float()类型不能通过float()直接转换为Python float。这可能是由于graphene.Float类型由于继承自graphene.Scalargraphene GH/Scalars)而具有可以保存在其数据结构中的大量数据。

我的猜测是追查float()通话并将其删除。如果那不起作用,那么我将转到您查询中的Float.num字段。

同样,这里所有的猜想,但我希望它能有所帮助。

答案 1 :(得分:0)

实际上,我不能将字段直接传递给Graphene对象,我们需要在具有Graphene对象的类的 init 方法中传递它,然后我们需要返回一个resolver方法(在我的情况下resolve_score)

相关问题