如何在djangorestframework中进行自定义响应

问题描述 投票:1回答:1

因此,我喜欢使用基于类的视图和ModelSerializers的想法,但是对于我的特定用例,我对此有疑问。也许我没有按照预期使用它。

class CarSerializer(serializers.ModelSerializer):

   class Meta:
        model = CarModel
        fields = ['car_name']


# A car can have build for multiple years
class MakelHistorySerializer(serializers.ModelSerializer):
   car = CarSerializer(many=True, read_only=True)

   class Meta:
        model = MakeHistoryModel
        fields = ['model_year', 'car']

响应为:

{
  "car": {
           "car_name": "Fiesta"
   },
   "model_year": "2020"
}

我的两个模型类CarModel和MakeHistoryModel分别具有[“ id”,“ car_name”,“ manufacturer”]和[“ id”,“ car_id”,“ model_year”,“ country_id”]字段。

我真正想要的回应是:

{
  "car_name": "Fiesta",
  "model_year": "2020"
}

我将如何做?

django django-models django-rest-framework response django-serializer
1个回答
0
投票

您不需要第一个序列化器(CarSerializer)。只需此序列化器具有足够的SerializerMethodField即可输出:

class MakelHistorySerializer(serializers.ModelSerializer):
   car_name = serializers.SerializerMethodField()

   class Meta:
        model = MakeHistoryModel
        fields = ['model_year', 'car_name']

   def get_car_name(self,obj):
       return obj.car.name if obj.car_id else ''
       # I don't know your model so to avoid NoneType error, I added this check
© www.soinside.com 2019 - 2024. All rights reserved.