1

I have the following model class

class Club(models.Model):
    """
    A table to store all clubs participating
    """
    name = models.CharField(max_length=30)
    logo = models.ImageField(upload_to='images/')
    goals_last_season = models.IntegerField()
    points_last_season = models.IntegerField()

    def __str__(self):
        return f'{self.name}'

and try to serialize it with this encoder

class ExtendedEncoder(DjangoJSONEncoder):
    def default(self, o):
        if isinstance(o, ImageFieldFile):
            return str(o)
        else:
            return super().default(o)

as follows:

def get_offer_details(request):
    """
    View to get the queried club's data
    :param request:
    :return:
    """

    # Get the passed club name
    club_name = request.POST.get('club_name')

    # Query the club object
    club_obj = Club.objects.get(name=club_name)

    # Create dict
    data = {
        'club_obj': club_obj
    }

    # Return object to client
    return JsonResponse(data, safe=False, encoder=ExtendedEncoder)

which raises TypeError: Object of type Club is not JSON serializable. How can I basically serialize this?

Full Traceback:

Traceback (most recent call last):
  File "/Users/jonas/PycharmProjects/farena/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/Users/jonas/PycharmProjects/farena/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/jonas/PycharmProjects/farena/applications/core/views.py", line 87, in get_offer_details
    return JsonResponse(data, encoder=ExtendedEncoder)
  File "/Users/jonas/PycharmProjects/farena/venv/lib/python3.9/site-packages/django/http/response.py", line 653, in __init__
    data = json.dumps(data, cls=encoder, **json_dumps_params)
  File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/__init__.py", line 234, in dumps
    return cls(
  File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/Users/jonas/PycharmProjects/farena/applications/core/views.py", line 15, in default
    return super().default(o)
  File "/Users/jonas/PycharmProjects/farena/venv/lib/python3.9/site-packages/django/core/serializers/json.py", line 106, in default
    return super().default(o)
  File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type Club is not JSON serializable
JSRB
  • 2,492
  • 1
  • 17
  • 48

0 Answers0