+

from django.db import models


class Actor(models.Model):
    first_name = models.CharField(max_length=64, blank=False, null=False)
    last_name = models.CharField(max_length=64, blank=False, null=False)
    date_of_birth = models.DateField(blank=False, null=False)

    @property
    def full_name(self):
        return f'{self.first_name} {self.last_name}'


class Movie(models.Model):
    title = models.CharField(max_length=256, blank=False, null=False)
    actors = models.ManyToManyField(Actor, related_name='movies')

Models:

from rest_framework import serializers

from .models import Actor, Movie


class ActorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Actor
        fields = ('id', 'full_name', 'date_of_birth')


class MovieSerializer(serializers.ModelSerializer):
    actors = ActorSerializer(many=True, read_only=True)

    class Meta:
        model = Movie
        models = ('id', 'title', 'actors')

serializers:

from rest_framework import viewsets

from .models import Movie
from .serializers import MovieSerializer


class MovieViewSet(viewsets.ModelViewSet):
    queryset = Movie.objects.all()
    serializer_class = MovieSerializer

VIEWS:

URLS:

from django.urls import path

from rest_framework import routers

from .views import MovieViewSet


movies_router = routers.DefaultRouter()
movies_router.register(r'movies', MovieViewSet, base_name='api_movies')

urlpatterns = movies_router.urls
GET api/v1/movies

{
    {
        "id": 1,
        "title": "Bohemian Rhapsody",
        "actors": [
            {
                "id": 1,
                "full_name": "Rami Malek",
                "date_of_birth": "12-05-1981"
            },
            {
                "id": 2,
                "full_name": "Gwilym Lee",
                "date_of_birth": "24-11-1983"
            }
        ]
    },
    {
        "id": 2,
        "title": "A Star Is Born",
        "actors": [
            {
                "id": 1,
                "full_name": "Lady Gaga",
                "date_of_birth": "28-03-1986"
            },
            {
                "id": 2,
                "full_name": "Bradley Cooper",
                "date_of_birth": "05-01-1975"
            }
        ]
    }
}

DEMO

DRF

By Ventsislav Tashev

DRF

Django REST Framework overview presentation

  • 645