#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:
# …