class Word(Model):
word = CharField()
categories = ManyToManyField('Category')
class Category(Model):
name = CharField()
获取所有唯一类别列表的最佳方法是什么?
例如,如果我有
apple -> General, Garden
pear -> General, Garden
computer -> IT
我想获得以下列表列表
(General, Garden)
(IT, )
我需要PostgreSQL解决方案。
答案 0 :(得分:1)
假设你有GroupConcat
这样的功能:
class GroupConcat(models.Aggregate):
function = 'GROUP_CONCAT'
template = '%(function)s(%(distinct)s%(expressions)s%(ordering)s%(separator)s)'
def __init__(self, expression, distinct=False, ordering=None, separator=',', **extra):
super(GroupConcat, self).__init__(
expression,
distinct='DISTINCT ' if distinct else '',
ordering=' ORDER BY %s' % ordering if ordering is not None else '',
separator=' SEPARATOR "%s"' % separator,
output_field=models.CharField(),
**extra
)
然后你可以这样做:
Word.objects.all().annotate(
category_names=GroupConcat('categories__name')
).values_list('category_names').distinct()
PS。这是一个MySQL解决方案。