Вы можете делать все в простом ViewSet (на самом деле, Viewset модели имеет все 4 действия - перечислить, создать, обновить, удалить). Все, что вам нужно установить - это свойство lookup_field
в наборе.
При использовании ViewSet вы также должны использовать маршрутизатор. Обычно придерживайтесь SimpleRouter . Читайте на другом, но это редко, что вы хотите.
class UserViewSet(ModelViewSet):
serializer_class = UserSerializer
lookup_field = "username"
def get_queryset(self):
return User.objects.all()
user_router = SimpleRouter()
user_router.register("users", UserViewSet, basename="users")
urlpatterns = [
# other url patterns you have
]
urlppatterns += user_router.urls
Вы можете запустить ./manage.py show_urls
, чтобы увидеть маршруты, которые были созданы. Там вы должны увидеть что-то вроде ../users/<username>/
.
Примечание. Хотя вы можете использовать ViewSet
непосредственно при настройке URL-адресов, обычно это делать не следует. Маршрутизатор обрабатывает создание и сопоставление методов и присваивает им соответствующие имена, чтобы их можно было предсказуемо перевернуть. Он также обрабатывает сопоставление методов @action
, которые вы можете добавить в ViewSet.
Если вам нужно сделать это вручную, то вам, вероятно, следует использовать вместо этого ApiView
, по одному для каждого пути.