萝卜白菜各有所爱,有喜欢用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="成功!")
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)