萝卜白菜各有所爱,有喜欢用objects.get(column=)也有人用objects.filter(column=),两者是有区别的,你知道么

1.django的get是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。 如果你用django的get去取得关联表的数据的话,而关键表的数据如果多于2条的话也会报错

2.django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。

例如以下代码:

   try:
            obj = AutomationTestTaskSerializer(AutomationTestTask.objects.get(project=project_id)).data
            # obj = ScpTaskSerializer(ScpTask.objects.get(project=project_id)).data
            obj = ScpTaskSerializer(ScpTask.objects.filter(project=project_id)).data
            return JsonResponse(code="999999", msg="成功!", data=obj)
        except ObjectDoesNotExist:
            return JsonResponse(code="999999", msg="成功!")

filter-get.png

3.遍历方式

  filter_res = ScpHost.objects.filter(Q(id=data['host_id']) & Q(project=data['project']))
            for res in filter_res:
                print(res.sipp_host)
            get_res = ScpHost.objects.get(id=data['host_id'], project=data['project'])
            sipp_host = get_res.sipp_host
            # sipp_host = get_res.sipp_host
            print(sipp_host)

filter-and-get.png

Last modification:October 26th, 2020 at 05:58 pm
如果觉得我的文章对你有用,请随意赞赏