У меня есть две модели: Пользователь и Билет. Заявка принадлежит одному Пользователю, Пользователь имеет много Заявок.
Я добился этого, когда я перехожу по URL-адресу /users/1/tickets, я получаю список билетов пользователя.
Я хочу использовать отношения с гиперссылками, и вот что я вижу в представлении модели пользователя:
"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')