【问题标题】:How to Serialize Queryset.values in Django?如何在 Django 中序列化 Queryset.values?
【发布时间】:2021-07-13 06:36:02
【问题描述】:

假设,我有一个查询:

qs = demo.objects.filter(id=id).values_list('name','price')

我有一个序列化器:

Class DemoSerialzier(serialzier.Modelserialzier):
      class Meta:
            model = Demo
            fields = ['name','price']

如何序列化我的 qs?当我通过序列化程序传递我的 qs 时,它会给出一个 AttributeError。 Django 试图在序列化程序上找到一个字段并且元组对象没有属性'name'。

【问题讨论】:

  • 你应该传递查询集而不是值列表查询集:删除对values_list的调用
  • 我有三个相互关联的模型。使用值列表我可以使我的查询更快,这就是我想使用它的原因。任何替代想法如何实现这一目标?
  • 您能否将模型和实际查询添加到您的问题中?提供的查询看起来只是获取模型上的两个字段并且没有关系
  • 如果您只想从数据库中检索某些字段,可以使用only()
  • like: qs = Demo.objects.filter(a_fk__another_fk__id = id, a_fk__date_time=timezone.now()) 我想让它更快。你能检查一下吗

标签: django django-models django-rest-framework django-queryset


【解决方案1】:

因为values_list 方法返回一个元组列表并且序列化程序正在寻找一个对象。如果您希望使用values_list 而不是序列化程序,您可以将values_list 结果直接传递给响应。

import itertools

# This will return list of tuples.
# To make it flat we have to use itertools chain.
qs = demo.objects.filter(id=id).values_list('name','price')
qs = list(itertools.chain(*qs)
return Response(qs)


【讨论】:

    猜你喜欢
    • 2011-11-30
    • 2017-10-15
    • 2016-12-15
    • 2011-11-21
    • 2011-08-11
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多