我有这样一个模型:
class Camper(models.Model):
location = models.PointField()
name = models.CharField(max_length=255)
和这样的视图集:
class CamperViewSet(viewsets.ModelViewSet):
...
def retrieve(self, request, *args, **kwargs):
"""Retrieve a Camper instance."""
show_weather = request.query_params.get('showWeather', False)
instance = self.get_object()
if show_weather:
lat = instance.location.y
lon = instance.location.x
instance.weather = getWeatherFromLatLon(lat, lon)
serializer = self.get_serializer(instance)
return Response(serializer.data)
因此,当我请求/api/campers/8?showWeather=true
时,我在视图中发出另一个请求,以获取当前位置的天气。
如何将它添加到我的序列化器中?这是一个可选字段,因此我需要管理它,并且它只在/campers/id
中使用,因此不会在list/create/put/etc中使用
我的序列化器如下所示:
class CamperSerializer(serializers.ModelSerializer):
camper_id = serializers.IntegerField(source='id')
class Meta:
model = Camper
fields = ('camper_id', 'name', 'location')
2条答案
按热度按时间qjp7pelc1#
你可以只为
retrive
添加custom serializer
。我调用了CamperRetriveSerializer
。在
CamperRetriveSerializer
中,您可以使用SerializerMethodField
定义数据库中没有的字段。您希望检查请求中的参数
show_weather
,最好将其值传递给context
,并在串行化器中获取。就像这样:
kpbwa7wx2#
您可以为此使用两个不同的序列化程序。