Аргумент float () должен быть строкой или числом, а не 'Float' - PullRequest
0 голосов
/ 06 января 2020

Я знаю, что этот вопрос задавался ранее, но ни один из вопросов не был полезен, поэтому задавал снова ..

Я использую графен и анализирую некоторые данные 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 голосов
/ 07 января 2020

На самом деле я не могу передать поля непосредственно объекту графена, и нам нужно передать его в методе init класса, который имеет объект графена, а затем нам нужно вернуться в методе решателя (в мой случай resol_score)

0 голосов
/ 06 января 2020

Так что я не могу комментировать, или я бы сделал это, и я очень хорошо могу ошибаться, но здесь идет речь.

Я предполагаю, что где-то вы звоните float(score), но тип graphene.Float() не может быть непосредственно преобразованным в Python float через float(). Вероятно, это связано с тем, что тип graphene.Float имеет так много данных, которые он может хранить в своей структуре данных из-за наследования от graphene.Scalar ( графена GH / Scalars ).

Я думаю, что чтобы выследить вызов float() и удалить его. Если это не сработает, я бы переместился в поле Float.num в вашем запросе.

Опять все гипотезы здесь, но я надеюсь, что это помогло.

...