def __iter__(self):
if self.field.group_by is None:
yield from super().__iter__()
return
if self.field.empty_label is not None:
yield ("", self.field.empty_label)
qs = self.queryset
if self.field.is_relation:
if self.field.group_by not in qs.query.order_by:
qs.query.order_by.insert(0, self.field.group_by)
qs = qs.select_related(self.field.group_by)
groups = groupby(
qs.all(),
key=lambda row: getattr(row, self.field.group_by)
)
for group, choices in groups:
yield smart_text(group), [self.choice(ch) for ch in choices]
评论列表
文章目录