두 모델이 있습니다 : 사용자 및 티켓. 티켓 한 사용자, 많은 티켓Django Rest Framework, 중첩 된 관계 하이퍼 링크
내가 /사용자/1/티켓를 URL로 갈 때, 나는 사용자의 티켓의 목록을 얻고 있음을 이룬있다 사용자가 있습니다. 할 수있는 방법이 있나요
"tickets": [
"http://127.0.0.1:8000/tickets/5/",
"http://127.0.0.1:8000/tickets/6/"
]
그러나 나는 그것이
"tickets": "http://127.0.0.1:8000/users/1/tickets"
처럼되고 싶어요 :
내가 여기에 하이퍼 링크 된 관계를 사용하려면, 그리고
내가 내 사용자 모델 표현에서 볼 것입니다 DRF와 그거?URL입니다 :
url(r'^users/(?P<user_pk>\d+)/tickets/$',
views.TicketsByUserList.as_view(),
name='myuser-tickets'),
뷰 :
class TicketsByUserList(generics.ListAPIView):
model = Ticket
serializer_class = TicketSerializer
def get_queryset(self):
user_pk = self.kwargs.get('user_pk', None)
if user_pk is not None:
return Ticket.objects.filter(user=user_pk)
return []
사용자 시리얼은 (내가하지만 효과, 유형, VIEW_NAME을 변경, 티켓 필드 정의와 재생하려고) :
class UserSerializer(serializers.HyperlinkedModelSerializer):
tickets = serializers.HyperlinkedRelatedField(many=True, view_name='ticket-detail')
class Meta:
model = MyUser
fields = ('id', 'nickname', 'email', 'tickets')
티켓 시리얼보기 :
class TicketSerializer(serializers.HyperlinkedModelSerializer):
user = serializers.HyperlinkedRelatedField(view_name='myuser-detail')
liked = serializers.Field(source='liked')
class Meta:
model = Ticket
fields = ('id', 'user', 'word', 'transcription', 'translation', 'liked', 'created', 'updated')
솔루션을 구현하기 위해 노력하고, 내가 어떻게 든 시리얼 라이저에 요청 개체를 전달할 수있는 것을 깨달았다 동안 : 공식적으로 – optimistiks
[serializer에 추가 컨텍스트를 제공하는 방법] (http://django-rest-framework.org/api-guide/serializers.html#including-extra-context)이 있습니다. 문서는 사용 사례의 사례로서 정확한 상황을 보여줍니다. –
'get_tickets' 메쏘드에서'request = self.context.get ('request')'로 요청 객체를 얻을 수 있고 평소처럼'reverse'를 호출 할 수 있습니다. – Cartucho