[英]Data from view to serializer in django rest api
我在这个问题上挣扎了一段时间。
好的,这是我的序列化程序:
from rest_framework import serializers
from happytourist.models import PointsInterestData
class PointsInterestSerializer(serializers.ModelSerializer, serializers.Serializer):
distance = serializers.IntegerField(default=None)
class Meta:
model = PointsInterestData
fields = ('name', 'latitude', 'longtitude', 'distance')
read_only_fields = fields
from rest_framework import generics
from .serializers import PointsInterestSerializer
from happytourist.models import PointsInterestData
class PointsInterestList(generics.ListCreateAPIView, generics.ListAPIView):
serializer_class = PointsInterestSerializer
def get_queryset(self):
queryset = PointsInterestData.objects.all()
return queryset
def create(self, request, *args, **kwargs):
user_latitude = request.POST.get('latitude')
user_longtitude = request.POST.get('longtitude')
radius = request.POST.get('radius')
usergeodata = {'latitude': user_latitude, 'longtitude': user_longtitude, 'radius': radius}
return usergeodata
def get_coordinates(self):
latitude = PointsInterestData.objects.model.latitude
longtitude = PointsInterestData.objects.model.longtitude
geodata = {"latitude": latitude, "longtitude": longtitude}
return geodata
我想要做的是根据视图更改序列化程序中的距离参数。 我需要编写一个函数来查看哪个结果将计算距离(我知道如何制作)并且这个结果将被放入序列化程序(我不知道如何制作)
如果我理解正确,则可以使用SerializerMethodField
并可以通过self.context
从视图访问数据。
class PointsInterestSerializer(serializers.ModelSerializer):
distance = serializers.SerializerMethodField(method_name='distancecalc') def distancecalc(self, pid_obj): # your logic context_from_view = self.context return 0 # or 1
好的,这是我所做的:
视图:
类PointsInterestList(generics.ListCreateAPIView,generics.ListAPIView):
def get_queryset(self):
queryset = PointsInterestData.objects.all()
return queryset
def distancecalc():
return 4
def get_serializer_context(self):
distance_result = PointsInterestList.distancecalc()
context = super(PointsInterestList, self).get_serializer_context()
context.update({'distance': distance_result})
return context
serializer_class = PointsInterestSerializer
串行:
类PointsInterestSerializer(serializers.ModelSerializer,serializers.Serializer):距离= serializers.SerializerMethodField(默认=无)
def get_distance(self, obj):
distance_view = self.context.get('distance')
return distance_view
class Meta:
model = PointsInterestData
fields = ('name', 'latitude', 'longtitude', 'distance')
read_only_fields = fields
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.