#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)