I use mongoengin in django app. each document in mongo has metadata that is dict and in it there is image address with out base_url. in django serializer I add base_url to it but it sometime get error
def to_representation(self, instance):
# when we search by image result has similarity and it`s milvus similarity and when search by text,
# we show it`s reference similarity
# obj.similarity: we had image and have similarity from milvus.
# obj.metadata.get('similarity') :we don`t have similarity from milvus use matched item similarity.
data = super(ResultSerializer, self).to_representation(instance)
if instance.similarity is not None:
data['similarity'] = decimal.Decimal(distance_to_score(instance.similarity)).quantize(
decimal.Decimal('0.000'), rounding=decimal.ROUND_DOWN)
else:
data['similarity'] = instance.metadata.get('similarity')
if frame_url := instance.metadata.get('frame_url'):
data.get('metadata')['frame_url'] = SHAHIN_SETTING['base_url'] + frame_url
return data
Error:
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | paginated_data['results'] = ResultSerializer(el_result, many=True).data
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | File "/usr/local/lib/python3.8/site-packages/rest_framework/serializers.py", line 745, in data
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | ret = super().data
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | File "/usr/local/lib/python3.8/site-packages/rest_framework/serializers.py", line 246, in data
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | self._data = self.to_representation(self.instance)
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | File "/usr/local/lib/python3.8/site-packages/rest_framework/serializers.py", line 663, in to_representation
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | return [
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | File "/usr/local/lib/python3.8/site-packages/rest_framework/serializers.py", line 664, in <listcomp>
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | self.child.to_representation(item) for item in iterable
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | File "/app/apps/search/serializers/v2.py", line 67, in to_representation
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | data.get('metadata')['frame_url'] = SHAHIN_SETTING['base_url'] + frame_url
Jan 23 16:17:10.527 | develop-shahin-develop-86df584cf6-wtrcm | File "/usr/local/lib/python3.8/site-packages/mongoengine/base/datastructures.py", line 35, in wrapper
Jan 23 16:17:10.528 | develop-shahin-develop-86df584cf6-wtrcm | self._mark_as_changed(key)
Jan 23 16:17:10.528 | develop-shahin-develop-86df584cf6-wtrcm | File "/usr/local/lib/python3.8/site-packages/mongoengine/base/datastructures.py", line 98, in _mark_as_changed
Jan 23 16:17:10.528 | develop-shahin-develop-86df584cf6-wtrcm | if hasattr(self._instance, "_mark_as_changed"):
Jan 23 16:17:10.528 | develop-shahin-develop-86df584cf6-wtrcm | ReferenceError: weakly-referenced object no longer exists
After searching and tracing a lot, I found this error has occurred because I want to change and return
I changed it to Python Dict and fixed the bug.