【问题标题】:How to avoid using `extra` when retrieve data from postgres?从 postgres 检索数据时如何避免使用`extra`?
【发布时间】:2019-09-11 18:10:10
【问题描述】:

我正在使用以下代码从 postgres 数据库中检索数据:

values = ('foo', 'bar', 'group')

FooBar.objects.order_by('-id').extra(select={'group': "'stackoverflow'"}).values(*values)

代码运行良好,但我听说使用 extra 并不可取,甚至 django 文档都说“将此方法用作最后的手段”。那么问题是如何避免使用extra 来检索数据?

【问题讨论】:

  • 在查询中这样做有什么意义?您只是在选择一个常量字符串。
  • @DanielRoseman 我需要根据 API 要求在查询集中有这个常量。而且它必须是一个查询集对象,因为 DRF 分页不接受非查询集对象。

标签: django orm django-orm


【解决方案1】:

您可以尝试使用Value() 表达式。基本上,当您需要在表达式中表示整数、布尔值或字符串的值时,可以将该值包装在 Value() 中。

from django.db.models import Value, CharField
FooBar.objects.annotate(group=Value('stackoverflow', output_field=CharField())).values('foo', 'bar', 'group').order_by('-id')

【讨论】:

  • 太棒了。正是我需要的。 Tnx!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 2012-06-09
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多