Как передать два условия в качестве параметров для запроса get() в django?

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

Я передал два условия методу filter(), поэтому он возвращает набор запросов.

Но как передать эти два условия методу get(), чтобы получить ответ как единый объект

Код:

 class DailyHolidayView(APIView):
  def post(self,request):
      city_name=request.data['city_name']
      date=datetime.strptime(request.data['date'], '%d/%m/%Y')
      print(date)
      res=Holiday.objects.filter(city_name=city_name,date=date)

      if (res):
           ser = MonthSerializer(res, many=True)
           return Response(ser.data, status=status.HTTP_200_OK)
 

Потому что я получаю ошибку, как показано ниже:

Ошибка утверждения: [{‘id’: 12, ‘date’: ’05/01/2019′, ‘holidayName’: ‘testHoliday2’}]!= {‘id’: 12, ‘date’: ’05/01/2019′, ‘holidayName’: ‘testHoliday2’}

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

1. .get(**kwargs) в основном это .filter(**kwargs).first()

2. Если вы получаете один объект, вы, вероятно, захотите удалить many=True его из своего вызова сериализатора, чтобы не возвращать список

Ответ №1:

Используя filter() , вы возвращаете список, если вам нужен только один объект в качестве ответа, вам нужно использовать get() метод. В вашем случае вы также можете захотеть использовать get_object_or_404 , если объект не существует. Наконец, вам не нужно many=true в вашем сериализаторе.

 from django.shortcuts import get_object_or_404


class DailyHolidayView(APIView):
  def post(self,request):
      city_name=request.data['city_name']
      date=datetime.strptime(request.data['date'], '%d/%m/%Y')
      print(date)
      res=get_object_or_404(Holiday, city_name=city_name,date=date)

      if (res):
           ser = MonthSerializer(res)
           return Response(ser.data, status=status.HTTP_200_OK)