尝试创建嵌套路由时出现KeyError

2024-07-01 07:27:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个https://dog.ceo/dog-api/克隆,但遇到了一个小问题

这是我的密码:

from django.db import models

# Create your models here.
class Breed(models.Model):
      name = models.CharField(max_length=150)


      def __str__(self):
          return self.name

class BreedImage(models.Model):
    breed = models.ForeignKey(Breed, related_name='BreedImages', on_delete=models.CASCADE)
    breedImage = models.ImageField(upload_to='photos')

序列化程序

from rest_framework import serializers
from .models import Breed, BreedImage

class BreedSerializer(serializers.ModelSerializer):


    class Meta:
        model = Breed
        fields = ['name', 'BreedImages']

class BreedSerializerRandom(serializers.ModelSerializer):


    class Meta:
        model = Breed
        fields = ['id', 'BreedImages']

观点

from django.shortcuts import render
from rest_framework import generics
from .models import Breed
from .serializers import BreedSerializer, BreedSerializerRandom
from rest_framework.parsers import FileUploadParser, FormParser, MultiPartParser
# Create your views here.

class BreedList(generics.ListCreateAPIView):
    parser_classes = (FormParser, MultiPartParser)
    queryset = Breed.objects.all()
    serializer_class = BreedSerializer
    pagination_class = None


class BreedDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Breed.objects.all()
    serializer_class = BreedSerializer
    pagination_class = None

class BreedDetailRandom(generics.RetrieveUpdateDestroyAPIView):

    serializer_class = BreedSerializerRandom

    def get_queryset(self):
        return Breed.objects.filter(id=self.kwargs['id']).order_by('?')[0]

网址

from django.urls import path
from Breed import views

urlpatterns = [
    path('breeds/', views.BreedList.as_view()),
    path('breeds/<int:pk>/', views.BreedDetail.as_view()),
    path('breeds/<int:pk>/random', views.BreedDetailRandom.as_view()),
]

我的错误是:

KeyError at /breeds/1/random

'id'

我正在尝试创建一个嵌套的url,以从我的API上的特定犬种中获取随机图像,我不确定问题出在哪里


Tags: pathdjangonamefromimportselfidmodels
1条回答
网友
1楼 · 发布于 2024-07-01 07:27:58

您的URL以pk作为参数

path('breeds/<int:pk>/random', views.BreedDetailRandom.as_view())

但在视图中,您正在查找id

return Breed.objects.filter(id=self.kwargs['id']).order_by('?')[0]

旁注->;order_by(“?”)效率低下

相关问题 更多 >

    热门问题