您可以通过使用自定义字段和使令牌只写\u来使用单个序列化程序来完成此操作class ProductSerializer(serializers.ModelSerializer):
"""
Serialize Product list
"""
class Meta:
"""
Metadata for Product Serializationt to expose API
"""
model = Product
fields = ('id', 'price', 'description', 'url')
class ProductField(serializers.PrimaryKeyRelatedField):
def to_representation(self, value):
id = super(ProductField, self).to_representation(value)
try:
product = Product.objects.get(pk=id)
serializer = ProductSerializer(product)
return serializer.data
except Product.DoesNotExist:
return None
def get_choices(self, cutoff=None):
queryset = self.get_queryset()
if queryset is None:
return {}
return OrderedDict([(item.id, self.display_value(item)) for item in queryset])
class OrderSerializer(serializers.ModelSerializer):
"""
Serialize Order of Product
"""
product = ProductField(queryset=Product.objects.all())
class Meta:
"""
Order metadata
"""
model = Order
fields = ('id', 'user', 'orderdate', 'token',
'paymentstatus', 'product')
extra_kwargs = {'token': {'write_only': True}}
自定义字段将允许您在过帐时使用模型ID,而在获取项时获取嵌套序列化程序。例如
职务:
^{pr2}$
获取:{
"product": {
"url": "http://localhost:8000/..."
"price": "$2.50",
...
}
...
}