2015-11-06 27 views
0

我試圖在任何位置附近發送事件。 我從這個串行器獲取輸入。序列化地理查詢集

class LatLongCateSerializer(serializers.Serializer): 
    category_id = serializers.IntegerField() 
    latitude = serializers.DecimalField(max_digits=30,decimal_places=15) 
    longitude = serializers.DecimalField(max_digits=30,decimal_places=15) 
    distance = serializers.IntegerField() 

然後我嘗試從這篇文章認爲從Django的REST框架的APIView繼承得到的事件,就像這樣:

class NearbyEvents(APIView): 
    serializer_class = LatLongCateSerializer 

    def get_serializer_class(self): 
     return self.serializer_class 

    def get_event_serializer(self): 
     return EventSerializer 

    def post(self, request, *args, **kwargs): 
     serializer = self.serializer_class(data=request.data) 
     if serializer.is_valid(): 
      point = Point(float(request.data['latitude']), float(request.data['longitude'])) 
      events = Event.objects.filter(location_point__distance_lte=(point, D(km=int(request.data['distance'])))) 
      if events.exists(): 
       event_serializer = self.get_event_serializer() 
       ev = event_serializer(data=events) 
       if ev.is_valid(): 
        return Response(ev.data, status=status.HTTP_200_OK) 
       else: 
        print ev.errors 
      return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

我的事件串從GeoFeatureModelSerializer

繼承
from rest_framework_gis.serializers import GeoFeatureModelSerializer 
class EventSerializer(GeoFeatureModelSerializer): 
    class Meta: 
     model = Event 
     geo_field = 'location_point' 

錯誤我獲得:

{u'non_field_errors': [u'Invalid data. Expected a dictionary, but got GeoQuerySet.']} 

我的活動模型:

from location_field.models.spatial import LocationField 
class BaseProduct(TimeStamp): 
    title = models.CharField(_('Title'), max_length=255) 
    desc = models.TextField(_('Description'), null=True, blank=True) 
    nearby_metro = models.CharField(_("Neraby Metro Station"), max_length=100, null=True, blank=True) 
location_point = LocationField(based_fields=[address], zoom=7, default='Point(1.0 1.0)') 
    latitude = models.DecimalField(max_digits=30,decimal_places=15,null=True, blank=True) 
    longitude = models.DecimalField(max_digits=30,decimal_places=15,null=True, blank=True) 

請指導我解決問題。

+0

你可以發佈你的事件模型。 – levi

+0

@levi請檢查模型。 –

回答

1

問題是內部「序列化」過程。實際上它是使用反序列化模式實現的,當然這並不起作用。它應該是這個樣子:

def post(self, request, *args, **kwargs): 
    serializer = self.serializer_class(data=request.data) 
    if serializer.is_valid(): 
     point = Point(float(request.data['latitude']), float(request.data['longitude'])) 
     events = Event.objects.filter(location_point__distance_lte=(point, D(km=int(request.data['distance'])))) 
     if events.exists(): 
      event_serializer = self.get_event_serializer() 
      ev = event_serializer(events, many=True) 
      return Response(ev.data, status=status.HTTP_200_OK) 
     return Response(status=status.HTTP_400_BAD_REQUEST) 
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
+0

tjhanks ..工作 –

0

ev = event_serializer(data=events)應該

ev = event_serializer(data=events,many=True)