Tastypie 및 Django를 사용하여 개발 된 백엔드가있는 Android 애플리케이션을 개발 중입니다. 나는 선택적으로 전체 객체 (URI가 아닌 완전한 관련 필드 포함)를 검색 할 수 있도록 요청을받습니다. 아래는 제가 이야기 자원에 대한 파이썬 코드의 일부입니다Tastypie 전체 리소스 얻기 두 번째에만 작동
class RideResource(ModelResource):
user = fields.ForeignKey(UserResource, 'driver')
origin = fields.ForeignKey(NodeResource, 'origin', full=True)
destination = fields.ForeignKey(NodeResource, 'destination', full=True)
path = fields.ForeignKey(PathResource, 'path')
# if the request has full_path=1 then we perform a deep query, returning the entire path object, not just the URI
def dehydrate(self, bundle):
if bundle.request.GET.get('full_path') == "1":
self.path.full = True
else:
ride_path = bundle.obj.path
try:
bundle.data['path'] = _Helpers.serialise_path(ride_path)
except ObjectDoesNotExist:
bundle.data['path'] = []
return bundle
당신이 RideResource가 PathResource에 외래 키 포인팅을 가지고 볼 수 있듯이. GET 요청에 "full_path"매개 변수가 1로 설정되어 있는지 검사 할 수 있도록 탈수 함수를 사용하고 있습니다.이 경우 프로그래밍 방식으로 경로 변수를 full=True
으로 설정합니다. 그렇지 않으면 단순히 경로 URI를 반환합니다.
코드는 GET이 수행 된 두 번째에만 작동하는 것 같습니다. 나는 수백 번 그것을 테스트했고 full_path=1
으로 GET을 수행 할 때 심지어 if를 입력하고 self.path.full = True
을 설정합니다. PathResource 객체의 URI 만 처음으로 반환합니다. 반면, 정확히 동일한 요청을 다시 시작하면 두 번째로 완벽하게 작동합니다 ...
어떤 문제인지 확인해보십시오.
편집 솔루션 FOUND 감사 후에 야쿱 RUP를
내가 마침내 다음 코드를 사용하여 작업 얻을 관리 @Tomasz TO :
def full_dehydrate(self, bundle, for_list=False):
self.path.full = bundle.request.GET.get('full_path') == "1"
return super(RideResource, self).full_dehydrate(bundle, for_list)
def dehydrate(self, bundle):
if not bundle.request.GET.get('full_path') == "1":
try:
bundle.data['path'] = _Helpers.serialise_path(bundle.obj.path)
except ObjectDoesNotExist:
bundle.data['path'] = []
return bundle