respondcreate / django-versatileimagefield

A drop-in replacement for django's ImageField that provides a flexible, intuitive and easily-extensible interface for quickly creating new images from the one assigned to the field.
http://django-versatileimagefield.readthedocs.io/
MIT License
530 stars 90 forks source link

Fails to work with django-cacheops #178

Open pymarco opened 3 years ago

pymarco commented 3 years ago

When using django-cacheops an AttributeError is thrown. It will work successfully when I don't cache the queryset with cacheops

Django==2.2.13 djangorestframework==3.11.2 django-cacheops==5.1 django-versatileimagefield==2.0

2021-01-28 17:23:32 ERROR [django.request:228] log Internal Server Error: /api/
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/usr/local/lib/python3.7/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/usr/local/lib/python3.7/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/usr/local/lib/python3.7/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/rest_framework/generics.py", line 252, in get
    return self.retrieve(request, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/rest_framework/mixins.py", line 56, in retrieve
    return Response(serializer.data)
  File "/usr/local/lib/python3.7/site-packages/rest_framework/serializers.py", line 562, in data
    ret = super().data
  File "/usr/local/lib/python3.7/site-packages/rest_framework/serializers.py", line 260, in data
    self._data = self.to_representation(self.instance)
  File "/usr/local/lib/python3.7/site-packages/rest_framework/serializers.py", line 529, in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "/usr/local/lib/python3.7/site-packages/rest_framework/serializers.py", line 529, in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "/usr/local/lib/python3.7/site-packages/versatileimagefield/serializers.py", line 53, in to_representation
    return self.to_native(value)
  File "/usr/local/lib/python3.7/site-packages/versatileimagefield/serializers.py", line 46, in to_native
    request=context_request
  File "/usr/local/lib/python3.7/site-packages/versatileimagefield/utils.py", line 223, in build_versatileimagefield_url_set
    img_url = get_url_from_image_key(image_instance, image_key)
  File "/usr/local/lib/python3.7/site-packages/versatileimagefield/utils.py", line 194, in get_url_from_image_key
    img_url = reduce(getattr, img_key_split, image_instance)
AttributeError: 'VersatileImageFieldFile' object has no attribute 'crop'
Asgavar commented 3 years ago

Hi @pymarco, did you manage to solve this/find the root cause? ;]

pymarco commented 3 years ago

Sorry, but no. I haven't dug into thoroughly. Instead I just didn't cache models that have a versatileimagefield. Far from ideal, but ok for my hobby project.