【问题标题】:Django ORM value_lists() unpack ArrayListFieldDjango ORM value_lists() 解包 ArrayListField
【发布时间】:2020-10-16 09:52:57
【问题描述】:

所以我有一个类似这样的模型

class Record(models.Model):
    name = models.CharField()
    synonyms = ArrayField(models.CharField())

我确实有以下记录:

Record 1 = Record(name=rec1, synonyms=['a','b'])
Record 2 = Record(name=rec2, synonyms=['c'])
Record 3 = Record(name=rec3, synonyms=['d','e'])

我只想获取列表中所有记录的同义词。

我试过了:

synonyms_list = Record.objects.all().values_list('synonyms')

然后它返回:

[['a','b'],['c'],['d','e']]

但我希望它解压缩同义词列表,我希望结果是这样的

['a','b','c','d','e']

是否可以使用 Django ORM 或使用 postgres 查询来做到这一点?

【问题讨论】:

  • 为什么不[x for xs in Record.objects.values_list('synonyms', flat=True) for x in xs]

标签: python django postgresql django-rest-framework


【解决方案1】:

基于this answer,您可以为您的模型做:

Record.objects.annotate(
    synonyms_flat=Func(F('synonyms'), function='unnest')
).values_list('synonyms_flat', flat=True)

【讨论】:

  • 就像我一直在寻找的一样!谢谢!
猜你喜欢
  • 2013-01-25
  • 2020-04-18
  • 2015-11-18
  • 2014-10-26
  • 2016-06-20
  • 2015-10-28
  • 1970-01-01
  • 2011-10-15
  • 2015-08-27
相关资源
最近更新 更多