django rest框架:在同一路径中包含相关的模型字段
我有两个序列化程序。愿望清单和产品。我想列出所有愿望清单上的产品。现在很好用。但产品细节是“产品”的关键要素。我是否可以删除该产品密钥,并显示产品详细信息以及愿望列表id 目前的结果:django rest框架:在同一路径中包含相关的模型字段,django,django-models,django-rest-framework,django-serializer,Django,Django Models,Django Rest Framework,Django Serializer,我有两个序列化程序。愿望清单和产品。我想列出所有愿望清单上的产品。现在很好用。但产品细节是“产品”的关键要素。我是否可以删除该产品密钥,并显示产品详细信息以及愿望列表id 目前的结果: class ProductSerializer(serializers.ModelSerializer): class Meta: model = Product fields = ('id','product_id','sku', 'title','price','imag
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ('id','product_id','sku', 'title','price','images')
class WishListSerializer(serializers.ModelSerializer):
product = ProductSerializer()
class Meta:
model = WishList
fields = ('wishlist_id','product',)
预期结果:
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"wishlist_id":1,
"product": {
"id": 1460,
"product_id": "04396134-3c90-ea7b-24ba-1fb0db11dbe5",
"sku": "bb4sd817",
"title": "Trinity Belt",
}
},
{
"wishlist_id":2,
"product": {
"id": 596,
"product_id": "52588d22-a62c-779b-8044-0f8d9892e853",
"sku": "ml346",
"title": "Martina Liana",
}
}
]
}
这是一种非常糟糕的做法,需要花费大量精力来实现序列化和反序列化,尤其是在Post、Update等情况下。 我可以想出两种方法。 1) 您可以在WishListSerializer中将缺少的字段用作SerializerMethodField 范例 (二) 您可以在
至\u表示中“取消”项目
上面有文件
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"wishlist_id":1,
"id": 1460,
"product_id": "04396134-3c90-ea7b-24ba-1fb0db11dbe5",
"sku": "bb4sd817",
"title": "Trinity Belt",
},
{
"wishlist_id":2,
"id": 596,
"product_id": "52588d22-a62c-779b-8044-0f8d9892e853",
"sku": "ml346",
"title": "Martina Liana",
}
]
}
product_id = serializers.SerializerMethodField()
def get_product_id(self, obj):
return obj.get_product().product_id
class WishListSerializer(serializers.HyperlinkedModelSerializer):
product_id = serializers.CharField(source='product.product_id')
.......
class Meta:
model = WishList
fields = (product_id, ......)
...
class WishListSerializer(serializers.ModelSerializer):
product = ProductSerializer()
class Meta:
model = WishList
fields = ('wishlist_id', 'product',)
# add
def to_representation(self, instance):
data = super().to_representation(instance)
flat_data = dict(wishlist_id=data['wishlist_id'], **data['product']) # construct (new dict) flat data
# or you could restructure same dict: data.update(data.pop('product'))
return flat_data