我希望获取数据的一部分,并在用户从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)

推荐答案

是的,有一种方法.您可以通过defer()排除较大的字段,也可以精确地指定要使用only()加载哪些字段.

不过,这只适用于查询集!与.filter()相反,.get()方法返回的不是查询集,而是对象本身.因此,您可能希望调整CategoriesSerializer以处理查询集.

disease = Disease.objects.filter(pk=pk_id).only("wanted_field1", "wanted_field2")

你也可以 Select .values()的方法.

disease = Disease.objects.filter(pk=pk_id).values("wanted_field1", "wanted_field2")

这些方法将该字段的规范直接传递给SQL命令.

我认为,一旦您获取对象本身,并且您不再处理查询集,它总是加载所有字段.这就是为什么您很可能希望继续使用查询集.

我对此不是百分之百肯定,因为我只读到过它,从来没有用过它.我很感激你的建议.

READ:

阅读第this节中的第二个"注意事项".它说,.defer().only()仅供高级使用,并提供了另一种方法.也许你应该go 做这件事--由你决定.

它创建了另一个在Meta类中定义了managed = False的模型.在该模型中,您可以指定常用的字段.

希望这些资源与您的用例相匹配,并对您有很好的帮助.

Django相关问答推荐

django命令中的no_color不起作用

当使用django-tinymce时,我在哪里指定referer?

一次请求中更新整个Django模型

为什么 Django 在错误的目录中寻找模板?

DecimalField 验证错误,返回不正确的值 Django

如何在 django 的列表中查找所有对象作为对象?

EmailBackend 用于在 Django 中通过多个 SMTP 发送邮箱

未捕获的类型错误:$(...).datepicker is not a function(anonymous function)

TestCase 类中的 setUpClass、setUpTestData 和 setUp 有什么区别?

手动触发 Django 邮件错误报告

使用 Python / Django 的 Google API 示例的 Oauth

Django 删除未使用的媒体文件

如何创建一个在复选框右侧显示复选框标签的 Django 表单?

Django:如何编写查询以使用多列进行排序,通过模板显示

Matplotlib - Tcl_AsyncDelete:异步处理程序被错误的线程删除?

有日期时间±无穷大吗?

Django unique_together 与可为空的 ForeignKey

基于 User-Agent 更改 Django 模板

django 应用基于条件的样式类

暂时禁用 Django 缓存