2013-01-31 5 views
1

사용자 지정 논리를 추가하거나 tastypie에 사용자 지정 논리를 추가하기 위해 어느 기능을 오버로드해야합니까? 예를 들어, name을 포함하는 CustomObject을 대문자로 반환하고 싶지만 반환하기 전에 소문자로 만들려고합니다.tastypie의 사용자 지정 논리

답변

1

그런 맞춤형 항목을 제공하려면 dehydrate 동안 수행하는 것이 좋습니다. 당신은 단지에 상기에서

class CustomObjectResource(ModelResource): 

    class Meta: 
     queryset = CustomObject.objects.all() 

    def dehydrate_title(self, bundle): 
     return bundle.data['name'].lower() 
+0

감사합니다. @msc, 아마도 이것은 질문을하는 데 실패한 것입니다. 내가 원하는 것은 get, post, behavior를 무시하는 것이다. 예를 들어 사용자가'get'에 쿼리를 보낼 때마다이 객체에 대한 카운터가 증가하고 사용자가'post' 쿼리를 보낼 때 먼저 특수 권한을 확인한 다음 일부 데이터를 변경하기위한 액세스 권한을 부여합니다 – user1318496

+1

get, 이것은 또한 탈수소주기에서 수행 될 수 있습니다 탈수소()를 확인하십시오. http://django-tastypie.readthedocs.org/en/latest/resources.html#advanced-data-preparation – msc

+0

put에 대해 액세스 권한을 게시하고 사용하려면 apply_authorization_limits()를 사용하십시오. – msc

0

당신은 이럴 모든 필드 재정의 할 수

class CustomResource(ModelResource): 

    name = fields.CharField(
     attribute='get_lowercased_name', 
     readonly=True 
    ) 

    class Meta: 
     queryset = Custom.objects.all() 

을 그리고 당신은 당신의 Custom 모델 클래스에 get_lowercased_name 방법을 정의 할 필요가있다.

+0

감사 @Michal 물론 :)의 .lower()를 찾고 제외

class MyResource(ModelResource): # The ''title'' field is already added to the class by ''ModelResource'' # and populated off ''Note.title''. But we want allcaps titles... class Meta: queryset = Note.objects.all() def dehydrate_title(self, bundle): return bundle.data['title'].upper() 

그럼 다음 documentation을 확인, 예 당신을 위해 무엇을 찾고있는 거의이다 예제를 제공하고 좋은 예제가 아닌 것처럼 보입니다. 표준 API를 사용하여 해결 되었기 때문입니다. 내가 원하는 것은 데이터를 반환하기 전에 일부 논리를 수행하는 것이지만, 논리를 어디에 둘 수 있는지 모르겠습니다. – user1318496

관련 문제