Queryset filter:检索manytomy字段作为每个obj的列表

2024-04-16 14:26:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检索一个模型的每个对象,只有它们的id和它们在多对多字段中的id列表。在

我的模型:

class Wordlist(models.Model):
  words = models.ManyToManyField(Word)


class Word(models.Model):
  word = models.CharField(max_length=256)

我有这个代码:

^{pr2}$

它给我的是:

[{'pk': 1, 'w': 7},
 {'pk': 1, 'w': 13},
 {'pk': 1, 'w': 17},
 {'pk': 2, 'w': 29},
 {'pk': 1, 'w': 42},
 {'pk': 3, 'w': 52},
 {'pk': 2, 'w': 65}
 ...
]

我想要的是:

[{'pk': 1, 'w': [7, 13, 17, 42,...]},
 {'pk': 2, 'w': [29, 65,...]},
 {'pk': 3, 'w': [52,...]},
 ...
]

一个简单的解决方案是根据它们的id组合dict,但我认为这不是一个好的实践,也不是非常有效,因为结果我们可能会有成千上万个dict。在

另外,我想知道是否可以对单个请求执行相反的操作;检索Wordlist一个单词的列表是针对Word上的请求中的每个单词。在


Tags: 对象模型id列表modelmodels单词dict
1条回答
网友
1楼 · 发布于 2024-04-16 14:26:37

如果使用PostgreSQL,则可以使用在django.contrib.postgres包中实现的array_agg函数。您的查询如下所示:

from django.contrib.postgres.aggregates.general import ArrayAgg

Wordlist.objects.annotate(arr=ArrayAgg('words')).values_list('id', 'arr')

相关问题 更多 >