【发布时间】:2020-04-23 18:43:46
【问题描述】:
我想在serializers.py 的to_representation 函数中使用variation 属性。当我试图实现它时发生了错误。我想我还是不明白 Python 类的基本原理。
这是我的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 在可浏览的 API 上给了我这个错误:
/api/markets/ 处的 AttributeError
“MarketSerializer”对象没有“变体”属性
虽然'variation': MarketSerializer.variation 和'variation': self.__class__.variation 给我这个错误:
/api/markets/ 处的 AttributeError
类型对象“MarketSerializer”没有属性“变体”
编辑'variation': variation 给我这个错误:
/api/markets/ 处的名称错误
名称“变体”未定义
【问题讨论】:
-
DRF 使用序列化器属性做了一些黑魔法。但是你还是直接调用你的方法。
标签: python django python-3.x python-2.7 django-rest-framework