저는 이런 매니저 모델을 가진 GeoDjango 프로젝트를 가지고 있습니다.Python TastyPie - 사용자 지정 관리자 메서드를 필터로 사용 하시겠습니까?
class AdvertManager(models.GeoManager):
def within_box(self, x0, y0, x1, y1):
geometry = Polygon.from_bbox((x0, y0, x1, y1,))
return self.filter(point__within=geometry)
나는 GET 매개 변수를 통해 within_box 기능을 노출하는 내 자원 모델 (AdvertResource)을 얻으려고, 같은;
http://127.0.0.1:8000/api/v1/advert/?format=json&box=51.623349,-3.25362,51.514195,-3.4754133
이와 같이 자원 모델에 build_filters
메소드를 쓰기 시작했습니다.
하지만 '키워드'상자 '를 입력란으로 해결할 수 없습니다 ...'라는 오류가 발생합니다.
맞춤 관리자의 메소드를 api urls에 표시 할 수 있습니까?
수정 - 이제 다음 해결책으로이 문제를 해결했습니다.
class AdvertResource(ModelResource):
longitude = fields.FloatField(attribute='longitude', default=0.0)
latitude = fields.FloatField(attribute='latitude', default=0.0)
author = fields.ForeignKey(UserResource, 'author')
def build_filters(self, filters=None):
"""
Build additional filters
"""
if not filters:
filters = {}
orm_filters = super(AdvertResource, self).build_filters(filters)
if 'point__within_box' in filters:
points = filters['point__within_box']
points = [float(p.strip()) for p in points.split(',')]
orm_filters['within_box'] = points
return orm_filters
def apply_filters(self, request, applicable_filters):
"""
Apply the filters
"""
if 'within_box' in applicable_filters:
area = applicable_filters.pop('within_box')
poly = Polygon.from_bbox(area)
applicable_filters['point__within'] = poly
return super(AdvertResource, self).apply_filters(request,
applicable_filters)
이 지금 요청 http://127.0.0.1:8000/api/v1/advert/?format=json&point__within_box=51.623349,-3.25362,51.514195,-3.4754133
이제 경계 상자 내의 모든 결과를 필터링 것을 의미한다.