由于嵌套的序列化程序,当前我得到以下响应。我在购物车序列化程序中嵌套了产品序列化程序。这样,我得到以下结果。但是要在主要部分(产品外部,如下图所示)中获得产品的所有属性
{
"product": {
"id": 1,
"name": "Ghost Peanut Butter Cereal Milk Whey Protein",
"product_code": "B07FLJYP5M",
"description": "Ghost products feature a 100% transparent label that fully discloses the dose of each active ingredient.",
"price": "5000.00",
"photo": "https://images-na.ssl-images-amazon.com/images/I/61WZazUpWsL._SX522_.jpg",
"link_to_amazon": "https://www.amazon.com/dp/B07FLJYP5M/?tag=1230568-20"
},
"description": null,
"default": "Yes"
}
但是我希望得到如下响应:
{
"name": "Ghost Peanut Butter Cereal Milk Whey Protein",
"product_code": "B07FLJYP5M",
"description": "Ghost products feature a 100% transparent label that fully discloses the dose of each active ingredient.",
"price": "5000.00",
"photo": "https://images-na.ssl-images-amazon.com/images/I/61WZazUpWsL._SX522_.jpg",
"link_to_amazon": "https://www.amazon.com/dp/B07FLJYP5M/?tag=1230568-20",
"description": null,
"default": "Yes"
}
models.py
class DefaultCart(models.Model):
# Default Cart in Model class
YES = 'Yes'
NO = 'No'
DEFAULT_CHOICES = (
(YES, 'Yes'),
(NO, 'No'),
)
product = models.ForeignKey(Product, related_name='product', on_delete=models.CASCADE)
description = models.TextField(blank=True, null=True)
default = models.CharField(
max_length=3,
choices=DEFAULT_CHOICES,
default=YES,
)
serializers.py
class ProductSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Product
fields=(
'id','name','product_code','description','price','photo','link_to_amazon'
)
class DefaultCartSerializer(serializers. HyperlinkedModelSerializer):
product = ProductSerializer(read_only=True)
class Meta:
model = DefaultCart
fields = (
'product',
'description',
'default'
)
read_only_fields = ('id',)
views.py
def index(request):
# retrive all default_carts or create new default_cart
if request.method == 'GET':
default_carts = DefaultCart.objects.all()
serializer = DefaultCartSerializer(default_carts, many=True)
return Response(serializer.data)
答案 0 :(得分:0)
在这里,我通过在serializers.py中执行以下操作解决了我的问题
class DefaultCartSerializer(serializers. ModelSerializer):
product_id = serializers.IntegerField(
required=True,
validators=[UniqueValidator(queryset=DefaultCart.objects.all())]
)
name = serializers.SerializerMethodField('get_product_name')
product_code = serializers.SerializerMethodField('get_product_product_code')
price = serializers.SerializerMethodField('get_product_price')
photo = serializers.SerializerMethodField('get_product_photo')
link_to_amazon = serializers.SerializerMethodField('get_product_link_to_amazon')
class Meta:
model = DefaultCart
fields = (
'id',
'product_id',
'description',
'default',
'name',
'product_code',
'price',
'photo',
'link_to_amazon'
)
read_only_fields = ('id',)
def get_product_name(self, obj):
return obj.product.name
def get_product_product_code(self,obj):
return obj.product.product_code
def get_product_price(self, obj):
return obj.product.price
def get_product_photo(self, obj):
return obj.product.photo
def get_product_link_to_amazon(self, obj):
return obj.product.link_to_amazon