【发布时间】:2021-10-17 08:59:31
【问题描述】:
/watch/stream/配置不正确 无法使用视图名称“streamplatform-detail”解析超链接关系的 URL。您可能未能在 API 中包含相关模型,或者在此字段上错误地配置了lookup_field属性。
在访问 URL(127.0.0.1:8000/watch/stream/) 时出现上述错误
Models.py
from django.db import models
class StreamPlatform(models.Model):
name = models.CharField(max_length=30)
about = models.CharField(max_length=150)
website = models.URLField(max_length=100)
def __str__(self):
return self.name
class WatchList(models.Model):
title = models.CharField(max_length=50)
storyline = models.CharField(max_length=200)
platform = models.ForeignKey(StreamPlatform, on_delete=models.CASCADE, related_name="watchlist")
active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
urls.py
from django.urls import path, include
from watchlist_app.api.views import WatchListAV, WatchDetailAV, StreamPlatformAV, StreamDetailAV
urlpatterns = [
path('list/', WatchListAV.as_view(), name='movie-list'),
path('<int:pk>/', WatchDetailAV.as_view(), name='movie-details'),
path('stream/', StreamPlatformAV.as_view(), name='stream-list'),
path('stream/<int:pk>/', StreamDetailAV.as_view(), name='stream-details'),
]
views.py
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from watchlist_app.models import WatchList, StreamPlatform
from watchlist_app.api.serializers import WatchListSerializer, StreamPlatformSerializer
class StreamPlatformAV(APIView):
def get(self, request):
platform = StreamPlatform.objects.all()
Serializer = StreamPlatformSerializer(platform, many=True, context={'request': request})
return Response(Serializer.data)
def post(self, request):
serializer = StreamPlatformSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors)
class StreamDetailAV(APIView):
def get(self, request, pk):
try:
platform = StreamPlatform.objects.get(pk=pk)
except StreamPlatform.DoesNotExist:
return Response({'error': 'Not found'}, status=status.HTTP_404_NOT_FOUND)
serializer = StreamPlatformSerializer(platform)
return Response(serializer.data)
def put(self, request, pk):
platform = StreamPlatform.objects.get(pk=pk)
serializer = StreamPlatformSerializer(platform, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk):
platform = WatchList.objects.get(pk=pk)
platform.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
class WatchListAV(APIView):
def get(self, request):
movies = WatchList.objects.all()
Serializer = WatchListSerializer(movies, many=True)
return Response(Serializer.data)
def post(self, request):
serializer = WatchListSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors)
class WatchDetailAV(APIView):
def get(self, request, pk):
try:
movie = WatchList.objects.get(pk=pk)
except WatchList.DoesNotExist:
return Response({'error': 'Not found'}, status=status.HTTP_404_NOT_FOUND)
serializer = WatchListSerializer(movie)
return Response(serializer.data)
def put(self, request, pk):
movie = WatchList.objects.get(pk=pk)
serializer = WatchListSerializer(movie, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk):
movie = WatchList.objects.get(pk=pk)
movie.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
serializer.py
from rest_framework import serializers
from watchlist_app.models import WatchList, StreamPlatform
class WatchListSerializer(serializers.ModelSerializer):
class Meta:
model = WatchList
fields = "__all__"
class StreamPlatformSerializer(serializers.HyperlinkedModelSerializer):
watchlist = WatchListSerializer(many=True, read_only=True)
class Meta:
model = StreamPlatform
fields = "__all__"
【问题讨论】:
标签: python django api django-rest-framework