【问题标题】:How to pass two conditions as parameters to get() query in django?如何将两个条件作为参数传递给 django 中的 get() 查询?
【发布时间】:2020-12-21 10:46:33
【问题描述】:

我已将两个条件传递给 filter() 方法,因此它返回 queryset 。

但是如何将这两个条件传递给 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)

因为我收到如下错误:

AssertionError: [{'id': 12, 'date': '05/01/2019', 'holidayName': 'testHoliday2'}] != {'id': 12, 'date': '05/ 01/2019', 'holidayName': 'testHoliday2'}

【问题讨论】:

  • .get(**kwargs) 基本上是.filter(**kwargs).first()
  • 如果你得到一个对象,那么你可能想从你对序列化程序的调用中删除many=True,这样你就不会返回一个列表

标签: django django-rest-framework


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 2012-07-08
    • 2022-12-15
    • 1970-01-01
    • 2023-03-06
    • 2018-09-30
    • 2017-03-08
    相关资源
    最近更新 更多