我只是在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元组的子集。有没有比蛮力更有效的方法,获取所有学校,然后循环使用方法?
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]
答案 0 :(得分:2)
您可以使用QuerySet的distinct
方法:
School.objects.order_by('school_type').distinct('school_type')
这将让数据库处理它而不是Python代码。请注意,只有在使用PostgreSQL时,才能将字段名称传递给distinct
。
您还可以使用values_list
:
School.objects.values_list('school_type', flat=True).distinct()
这将返回值列表。