Django视图仅适用于一个url,尽管视图中生成了相应的查询集
我正在尝试访问应用程序中属于课程的课程。当我使用“url”时,会返回相应的结果。但是,当我尝试任何其他url(如“”)时,会出现错误 结果 预期成果 实际结果Django视图仅适用于一个url,尽管视图中生成了相应的查询集,django,django-rest-framework,django-views,django-rest-framework-filters,Django,Django Rest Framework,Django Views,Django Rest Framework Filters,我正在尝试访问应用程序中属于课程的课程。当我使用“url”时,会返回相应的结果。但是,当我尝试任何其他url(如“”)时,会出现错误 结果 预期成果 实际结果 { "detail": "Not found." } 网址 看法 模型 该视图返回对象的 和的。在我缺乏经验的眼中,视图似乎正在返回适当的查询集,但它无法为第二个url生成任何结果。如何使其正确响应。您还可以使用泛型。RetrieveAPIView获取详细视图。而不是声明查询集和序列化程序类。实际上我是这样做的请确认代码中没有错
{
"detail": "Not found."
}
网址
看法
模型
该视图返回对象的
和
的。在我缺乏经验的眼中,视图似乎正在返回适当的查询集,但它无法为第二个url生成任何结果。如何使其正确响应。您还可以使用泛型。RetrieveAPIView获取详细视图。而不是声明查询集和序列化程序类。实际上我是这样做的请确认代码中没有错误。请检查您的数据库中是否有
。我非常确定我有第2课。除了第1课之外,该代码不适用于任何组合1@FaisalManzerIt是您应该在此处重写的get\u对象
,而不是get\u queryset
(并且应该使用get not filter)@DanielRoseman谢谢你,它现在起作用了。但是我似乎不能把你的评论作为答案。
{
"id": 1,
"title": "course 1 lessson 2",
"owner": 1,
"course": 1
}
{
"detail": "Not found."
}
path('courses/<int:pk>/lessons/<int:lpk>/', LessonDetail.as_view()),
class LessonSerializer(serializers.ModelSerializer):
class Meta:
model = Lesson
fields = ['id','title','owner','course']
class LessonDetail(generics.RetrieveUpdateDestroyAPIView):
# queryset = Lesson.objects.all()
serializer_class = LessonSerializer
def get_queryset(self):
# GET PK FROM URL USING KWARGS
course_pk = self.kwargs['pk']
lesson_pk = self.kwargs['lpk']
qs = Lesson.objects.filter(course_id=course_pk,id=lesson_pk)
print(qs)
return qs
class Lesson(models.Model):
title = models.CharField(max_length=150, help_text='Enter course title')
video = models.CharField(max_length=150, help_text='Enter course title', null=True)
thumbnail = models.CharField(max_length=150, help_text='Enter course title', null=True)
pub_date = models.DateField(null=True, blank=True)
course = models.ForeignKey('Course', on_delete=models.CASCADE,related_name='lessons')
description = models.TextField(max_length=1000, help_text='Enter a brief description of the course')
owner = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, )