Code Reference

DRF List Create

Django · Example / how-to

DRF List Create

Django · Example / how-to


📋 Overview

Expose a JSON list + create endpoint with Django REST Framework ListCreateAPIView and a ModelSerializer.

🔧 Core concepts

PieceRole
ModelSerializerMap model ↔ JSON
ListCreateAPIViewGET list, POST create
PermissionsWho can write
PaginationBound list size

💡 Examples

serializers.py:

from rest_framework import serializers
from .models import Note


class NoteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Note
        fields = ["id", "title", "body", "created_at"]
        read_only_fields = ["id", "created_at"]

views.py:

from rest_framework import generics, permissions
from .models import Note
from .serializers import NoteSerializer


class NoteListCreateView(generics.ListCreateAPIView):
    queryset = Note.objects.all().order_by("-created_at")
    serializer_class = NoteSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]

    def perform_create(self, serializer):
        serializer.save()

urls.py:

from django.urls import path
from .views import NoteListCreateView

urlpatterns = [
    path("api/notes/", NoteListCreateView.as_view(), name="api-note-list"),
]

curl:

curl -s http://127.0.0.1:8000/api/notes/
curl -s -X POST http://127.0.0.1:8000/api/notes/ \
  -H "Content-Type: application/json" \
  -H "Authorization: Token <token>" \
  -d '{"title":"Hello","body":"World"}'

⚠️ Pitfalls

  • Default permissions may be wide open — set project defaults in settings.
  • N+1 queries: use select_related / prefetch_related on the queryset.
  • Validation errors return 400 with field keys — match your client expectations.

On this page