繁体   English   中英

django rest api 中从视图到序列化程序的数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM