I'm having trouble defining different sets of views for the same object using the Django Rest Framework. Below is a minimal example to reproduce a problem based on Quickstart DRF. I am using python 3.5 and latest DRF.
tutorial /Quickstart/serializers.py
from django.contrib.auth.models import User from rest_framework import serializers class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('url', 'username', 'email') class UserMinimalSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('url', 'username')
tutorial /Quickstart/views.py
from django.contrib.auth.models import User from rest_framework import viewsets from tutorial.quickstart.serializers import UserSerializer, UserMinimalSerializer class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer class UserMinimalViewSet(viewsets.ModelViewSet): queryset = User.objects.all().order_by('-date_joined') serializer_class = UserMinimalSerializer
tutorial /urls.py
from django.conf.urls import url, include from rest_framework import routers from tutorial.quickstart import views router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) router.register(r'users-minimal', views.UserMinimalViewSet) urlpatterns = [ url(r'^', include(router.urls)) ]
When you start the server and get the root directory, you will get:
HTTP 200 OK Allow: GET, HEAD, OPTIONS Content-Type: application/json Vary: Accept { "users": "http://127.0.0.1:8000/users-minimal/", "users-minimal": "http://127.0.0.1:8000/users-minimal/" }
Note that both users and users-minimal point to .../users-minimal/ .
Also, when accessing http://HOST:PORT/users/ you get:
HTTP 200 OK Allow: GET, POST, OPTIONS Content-Type: application/json Vary: Accept { "count": 2, "next": null, "previous": null, "results": [ { "url": "http://127.0.0.1:8000/users-minimal/2/", "username": "user2", "email": " user2@users.com " }, { "url": "http://127.0.0.1:8000/users-minimal/1/", "username": "user1, "email": " user1@users.com " } ] }
Note that the URLs point to .../users-minimal/ .
Final note: my question is somewhat similar to this one , but the proposed solution did not work for me, and did not suggest why it should work in the first place.