https://gist.github.com/ranman/3d97ea9054c984bca75e
Желаемое поведение
Поиск пользователя происходит по имени пользователя: /api/users/randall
Поиск динамиков происходит по имени пользователя: /api/speakers/randall
Ограничения
Не все пользователи - ораторы. Все динамики - это пользователи.
models.py
from django.contrib.auth.models import User
class Speaker(models.Model):
user = models.OneToOneField(User)
serializers.py
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'groups')
lookup_field = 'username'
class SpeakerSerializer(serializers.HyperlinkedModelSerializer):
user = serializers.HyperlinkedRelatedField(
view_name='user-detail',
read_only=True,
lookup_field='username'
)
class Meta:
model = Speaker
lookup_field = 'user'
views.py
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
lookup_field = 'username'
class SpeakerViewSet(viewsets.ModelViewSet):
queryset = Speaker.objects.all().select_related('user')
serializer_class = SpeakerSerializer
lookup_field = "user"
Я пробовал различные разные вызовы типов lookup_field и serializer, чтобы это не помогло. Это может быть невозможно без большого количества кода. Мне просто интересно, какое направление я могу предпринять.
Спасибо!