我想获取一部分数据,并在用户从django请求并序列化时按需/onclick显示。
目前,我将所有数据提取到客户端,这可能会导致应用程序扩展时的性能问题。我如何使用下面的get
代码片段来实现这一点。如果有人能帮我解决我想解决的问题,那就太好了。先谢谢你了。
def get(self, request, hashid=None, lang=None):
try:
if hashid:
pk_id = settings.LKC_HASH.decode(hashid)[0]
disease = Disease.objects.get(pk=pk_id)
serializer = CategoriesSerializer(disease)
else:
diseases = Disease.objects.values('id', 'translations__subcategory', 'translations__name').all()
serializer = CategoriesSerializer(diseases, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
except Disease.DoesNotExist:
return Response({'error': 'Disease Does Not Exist!'}, status=status.HTTP_404_NOT_FOUND)
except Exception as e:
capture_exception(e)
return Response({'error': 'There was an error while fetching the diseases!'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
1条答案
按热度按时间anauzrmj1#
是的,有办法。您可以通过
defer()
排除大字段,或者使用only()
指定要加载的字段。但这只对查询集有效!与
.filter()
相反,.get()
方法不返回查询集,而是返回对象本身。因此,您可能需要调整CategoriesSerializer
来处理查询集。你也可以使用
.values()
方法。这些方法将字段的规范直接传递给SQL命令。
我认为一旦你获取了对象本身,你就不再处理查询集了,它总是加载所有的字段。这就是为什么你很可能想继续使用查询集。
我不是100%确定,因为我只读过它,从来没有用过它自己。谢谢你的建议
阅读:
阅读本节中的第二个“注解”。它说
.defer()
和.only()
仅用于高级用途,并提供了另一种方法。或许你该去试试看-你说了算。它创建了另一个模型,该模型在
Meta
类中定义了managed = False
。在该模型中,您可以指定常用的字段。希望这些资源与您的使用情况相匹配,并对您有很好的帮助。