Я изо всех сил пытаюсь заставить мой API работать, учебники довольно хитры в этой части.Я хочу получить POST-запрос '/ comments /' с телом {movie_id: 1, content = "Some comment") и подключить его к некоторому фильму.
В сериализаторе я получаю: {'movie': [ErrorDetail(string='This field is required.', code='required')]}
Как я могу сопоставить movie_id с фильмом?Кстати, я могу изменить название на фильм, если это будет проще.
Models.py:
from django.db import models
from django.utils import timezone
class Movie(models.Model):
title = models.CharField(max_length=200)
year = models.IntegerField()
class Comment(models.Model):
content = models.TextField(max_length=300)
publish_date = models.DateField(default=timezone.now())
movie = models.ForeignKey(Movie, on_delete=models.CASCADE, related_name='movie_id')
serializers.py:
class MovieSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Movie
fields = '__all__'
class CommentSerializer(serializers.HyperlinkedModelSerializer):
movie_id = serializers.PrimaryKeyRelatedField(many=False, read_only=True)
class Meta:
model = Comment
fields = '__all__'
просмотров.py (для комментариев, фильм работает отлично):
from .models import Movie, Comment
from rest_framework import viewsets, status
from rest_framework.response import Response
from .serializers import MovieSerializer, CommentSerializer
class CommentViewSet(viewsets.ModelViewSet):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
def create(self, request, *args, **kwargs):
serializer = CommentSerializer(data=request.data, context={'request': request})
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)