I want to use variation attribute inside to_representation function in serializers.py. When I tried to implement it an error occured. I think I still don't understand the fundamental of Python class.
Here's my serializers.py:
class MarketSerializer(serializers.ModelSerializer):
regions = serializers.PrimaryKeyRelatedField(many=True, queryset=Region.objects.all())
languages = serializers.PrimaryKeyRelatedField(many=True, queryset=Language.objects.all())
variation = serializers.SerializerMethodField('get_product_variations')
class Meta:
model = Market
fields = ['id', 'regions', 'languages', 'name', 'status', 'variation']
depth = 1
@staticmethod
def get_product_variations(self):
return Product.objects.filter(distributor__region__market=self).distinct().count()
def to_representation(self, instance):
if self.context['request'].method == 'GET':
regions = RegionSerializer(instance.regions, many=True).data
languages = LanguageSerializer(instance.languages, many=True).data
data = {
'id': instance.id,
'regions': regions,
'languages': languages,
'name': instance.name,
'status': instance.status,
'variation': self.variation,
}
return data
return Serializer.to_representation(self, instance)
'variation': self.variation gives me this error on browsable API:
AttributeError at /api/markets/
'MarketSerializer' object has no attribute 'variation'
While 'variation': MarketSerializer.variation and 'variation': self.__class__.variation give me this error:
AttributeError at /api/markets/
type object 'MarketSerializer' has no attribute 'variation'
Edit
'variation': variation gives me this error:
NameError at /api/markets/
name 'variation' is not defined