coddingtonbear / django-measurement

Easily store, retrieve, and convert measurements of weight, volume, distance, area and more.
MIT License
145 stars 33 forks source link

Serializer gives float() argument must be a string or a number, not 'Distance' #100

Closed buddy106 closed 4 years ago

buddy106 commented 4 years ago

I have a few MeasurementFields set up in my Django model. My serializer fails with the above message. What am I missing? How can I use MeasurementFields with the Django Rest Framework serializers?

The traceback looks like below:

Traceback (most recent call last):
  File "/home/lib64/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/lib64/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/lib64/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/lib64/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/lib64/python3.6/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/lib64/python3.6/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/home/lib64/python3.6/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/lib64/python3.6/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/home/lib64/python3.6/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/o/barcodes/views.py", line 151, in get
    return Response(serializer.data)
  File "/home/lib64/python3.6/site-packages/rest_framework/serializers.py", line 562, in data
    ret = super().data
  File "/home/lib64/python3.6/site-packages/rest_framework/serializers.py", line 260, in data
    self._data = self.to_representation(self.instance)
  File "/home/lib64/python3.6/site-packages/rest_framework/serializers.py", line 529, in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "/home/lib64/python3.6/site-packages/rest_framework/serializers.py", line 678, in to_representation
    self.child.to_representation(item) for item in iterable
  File "/home/lib64/python3.6/site-packages/rest_framework/serializers.py", line 678, in <listcomp>
    self.child.to_representation(item) for item in iterable
  File "/home/lib64/python3.6/site-packages/rest_framework/serializers.py", line 529, in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "/home/lib64/python3.6/site-packages/rest_framework/fields.py", line 1030, in to_representation
    return float(value)
codingjoe commented 4 years ago

Hi @buddy106,

thanks for reaching out. If you want to use a SerializerMethodField. The corresponding method should decide how you want to display the measure. Maybe as a string, or as a JSON object with separate value and unit.

Anyhow, I hope that we can bring official support for DRF to this package in a future version.

Best, Joe