2012-07-11 3 views
0

Im tastypie을 사용하고 있는데 문제가 생겼습니다.Tastypie - 제복이나 필터

내 문제 :

사용자가 메시지를 게시 할 수 있으며 다른 사용자가 해당 사용자에 가입하는 경우가 홈페이지에 그 메시지를 볼 수 있습니다. 그것의 는 트위터 사용자가 tweet하고 팔로워가 자신의 트윗을보고있는 것과 같습니다.

모든 메시지에 공개 API가 있습니다.
나는 문제에 ?userid=1

나쁜 솔루션을 사용하여 특정 사용자의 메시지를 필터링 할 수 있습니다
?userid__in=1&userid__=5&...

를 사용
내가 (문제 때문에 해결) 여러 사용자가 메시지를 필터링 할 수 있습니다 그러나 이것은 아니다 URL 길이가 허용되지 않는 양까지 늘어날 것이므로 좋은 방법입니다. (2000 자)

더 좋은 방법이 있습니까?
querysetrequest.user을 사용할 수있는 방법이 있습니까?
고급 필터링을 사용해야합니까?

감사합니다.

답변

5

Tastypie 이미이 지원 __in 필터링을 통해 (모든 것을 ORM은 부정을 제외하고 Tastypie 노출을 지원합니다. 코딩은 필요하지 않습니다. 여기

봐는 : http://django-tastypie.readthedocs.org/en/v0.9.11/resources.html#basic-filtering

path/to/api/resource/?user_id__in=1,2,3,4,5,6 

그러나 여전히 많은 사용자에 가입 한 사람과 거대한되고 귀하의 URL의 문제가있을 수 있습니다. 대신 DB 모델에서이 정보를 유지할 수 있습니다 (사용자는 별도의 관절 모델을 통해 모델 내에서 재귀 ManyToMany 관계로 어떤 사용자에게 가입되어 있는지).

그런 다음 매개 변수 및/또는 필터로 URL을 통해 구독을 지정하지 않고도 리소스를 통해이를 노출시킬 수 있습니다. 대신 자원에베이스의 검색어는 다음과 같습니다

userids = request.user.subscription_userset.values(id) 

당신이 당신의 User 모델의 self ManyToManyRelationship을 가지고 제공. herehere을보십시오.

1

만약 누군가가 user_ids의 목록을 통과했다면, 업데이트를보고 싶었고 그걸 필터링 했습니까? 이런 식으로 뭔가 :

URL: your/api/messages.json?user_ids=5,8,10,25

그리고 코드에서 당신이 실제 목록에 그 변환 것, 및 쿼리 :

Message.objects.filter(user__id__in=user_ids)

+0

감사! tastypie를 사용하여 어떻게 할 수 있습니까? – nknj

+2

아니요,하지만 이렇게하면 좋은 출발점이 될 것 같습니다 : http://django-tastypie.readthedocs.org/en/latest/cookbook.html#per-request-alterations-to-the-queryset – girasquid

+0

감사합니다. girasquid ! – nknj