# coding: utf-8 from tastypie.resources import ModelResource from avisstage.models import Lieu from django.contrib.gis import geos class LieuResource(ModelResource): class Meta: queryset = Lieu.objects.all() resource_name = "lieu" fields = ["nom", "pays", "coord", "type_lieu", "id"] def build_filters(self, filters=None, **kwargs): if filters is None: filters = {} orm_filters = super(LieuResource, self).build_filters() if "lng" in filters and "lat" in filters: lat = float(filters['lat']) lng = float(filters['lng']) pt = geos.Point((lng,lat), srid=4326) self.reference_point = pt orm_filters['coord__distance_lte'] = (pt, 50) if "has_stage" in filters: orm_filters['stages__public'] = True return orm_filters def dehydrate(self, bundle): bundle = super(LieuResource, self).dehydrate(bundle) obj = bundle.obj bundle.data['coord'] = {'lat': float(obj.coord.y), 'lng': float(obj.coord.x)} if "lat" in bundle.request.GET and "lng" in bundle.request.GET: bundle.data['distance'] = self.reference_point.distance(bundle.obj.coord) bundle.data["pays_nom"] = obj.get_pays_display() bundle.data["type_lieu_nom"] = obj.get_type_lieu_display() return bundle