3

我只是 django query-fu 的棕带。所以也许这里有一些我不知道的新技巧。

这是我的模型:

SCHOOL_TYPES = (('elementary', 'Elementary Schools'), ('middle', 'Middle Schools'), ('junior_high', 'Junior High Schools'), ('high_school', 'High Schools'), ('other', "Other"))

class School (BaseSlugModel):
    name=CharField(max_length=100)
    school_type = models.CharField(max_length=20, choices=SCHOOL_TYPES)

出于 UI 目的,我想编写一个函数,该函数get_active_school_types返回 SCHOOL_TYPES 元组的子集,其中包含 1 个或多个学校。有没有比蛮力更有效的方法来做到这一点,得到所有学校然后循环通过它们的方法?

编辑:这是我的解决方案,基于西蒙的回答:

active_types = School.objects.values_list('school_type', flat=True).distinct()
return [ school_type for school_type in SCHOOL_TYPES if school_type[0] in active_types]
4

1 回答 1

2

您可以使用distinctQuerySet 的方法:

School.objects.order_by('school_type').distinct('school_type')

这将让数据库而不是您的 Python 代码来处理它。请注意,distinct仅当您使用 PostgreSQL 时才将字段名称传递给。

您还可以使用values_list

School.objects.values_list('school_type', flat=True).distinct()

这将返回一个值列表。

于 2012-07-16T13:18:00.350 回答