首页 > 解决方案 > 错误在哪里???KeyError:“开始日期”

问题描述

我没有在我的 GET 请求中放入任何正文参数(start_date,end_date),应该可以使用 else 语句但出现奇怪的错误,所以有问题吗??

class MoviesTop(APIView):

    def get(self, request):

        if request.data.get('start_date', 'end_date'):
            start_timestamp = request.data['start_date']
            end_timestamp = request.data['end_date']
            topMovie = Movie.objects.annotate(
                num_comments=Count(
                    'Comments',
                    filter=Q(Comments__pub_date__range=(
                        start_timestamp, end_timestamp))
                )
                ).order_by('-num_comments')
            
        
        else:
            topMovie=Movie.objects.annotate(
                num_comments=Count('Comments')).order_by('-num_comments')
        
        
        serializer=MoviesTopSerializator(topMovie, many=True)
        return Response(serializer.data)

标签: pythondjango

解决方案


request.data.get('start_date', 'end_date')会有真实性True,即使start_date不存在。它将返回'end_date',第二个参数是默认值,而不是另一个要检查的键。

因此,您可以通过以下方式检查:

if 'start_date' in request.data and 'end_date' in request.data:
    # …

推荐阅读