15

I'm trying to return this list in flask. Teacher is a class and returns objects.

@app.route('/v1/teachers', methods=['GET'])
def getTeachers():
  teachers = []
  for teacher in Teacher.objects:
    teachers.append(teacher)
  return teachers

This code returns the typical error of TypeError: 'list' object is not callable The view function did not return a valid response.

I'm going crazy and I don't know what's going on. Does anyone know?

Thank you!!

EDIT:

I've already worked it out. The problem was not how to return the list, the problem was the serialization in JSON of the objects.

@app.route('/v1/teachers', methods=['GET'])
def getTeachers():
  teachers = []
  for teacher in Teacher.objects:
     teacherJson = teacher.to_json()
     teacherData = json.loads(teacherJson)
     teachers.append(teacherData)
  return jsonify({'teachers': teachers})

Thanks for your help.

laurajaime
  • 379
  • 1
  • 3
  • 14

2 Answers2

27

You can't return a list directly from flask view.please try to jsonify

from flask import jsonify
@app.route('/v1/teachers', methods=['GET'])
def getTeachers():
   teachers = []
   for teacher in Teacher.objects:
      teachers.append(teacher)
   return jsonify(teachers)
shijin
  • 461
  • 4
  • 11
4

You are returning a list, Flask expects a response to be returned.

from flask import jsonify

@app.route('/v1/teachers', methods=['GET'])
def getTeachers():
  teachers = []
  for teacher in Teacher.objects:
    teachers.append(teacher)
  return jsonify({"teachers": teachers})
ybl
  • 1,510
  • 10
  • 16