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.

3
  • 2
    Have you tried checking the value in Teacher.objects ? Also, you might need to return response in json. So, you will need to pass this list in json format. Commented Jan 2, 2019 at 9:20
  • 3
    try return json.dumps(teachers) Commented Jan 2, 2019 at 9:21
  • This doesn't work, it gives me back this error: TypeError: <Teacher: Teacher object> is not JSON serializable Commented Jan 2, 2019 at 14:55

2 Answers 2

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)
Sign up to request clarification or add additional context in comments.

3 Comments

Does not work TypeError: Object of type List is not JSON serializable
This works at least for python 2.
5

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})

4 Comments

This doesn't work, it gives me back this error: TypeError: <Teacher: Teacher object> is not JSON serializable
This does not work.
You can see the edit from OP in his answer. The teacher object has to be converted to JSON here if it's not automatically convertible.
def test(): test = ['1','2','3'] return jsonify({'test':test})

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.