Где ошибка???? KeyError: ‘start_date’

#python #django

#python #django

Вопрос:

Я не ввел никаких аргументов тела (start_date, end_date) в свой запрос GET, должен работать оператор 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)
 

Комментарии:

1. Какая строка генерирует ошибку?

2. Потому request.data что не имеет ключа start_date .

3. Обратите внимание, что это request.data.get('start_date', 'end_date') будет правдиво True , поскольку, даже если start_date не существует, оно вернется 'end_date' , второй параметр — это значение по умолчанию , а не другой ключ, который будет проверяться.

Ответ №1:

request.data.get('start_date', 'end_date') будет иметь достоверность True , даже если start_date не существует. Он вернется 'end_date' , второй параметр — это значение по умолчанию, а не другой ключ, который будет проверен.

Таким образом, вы проверяете это с помощью:

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