- crags = iter(self.crags.order_by('name'))
- clusters = iter(self.clusters.order_by('name'))
-
- try:
- crag = next(crags)
- except StopIteration:
- crag = None
-
- try:
- cluster = next(clusters)
- except StopIteration:
- cluster = None
-
- while crag and cluster:
- if crag.name < cluster.name:
- yield crag
- try:
- crag = next(crags)
- except:
- crag = None
- else:
- yield cluster
- try:
- cluster = next(clusters)
- except:
- cluster = None
-
- while crag:
- yield crag
- try:
- crag = next(crags)
- except:
- crag = None
-
- while cluster:
- yield cluster
- try:
- cluster = next(clusters)
- except:
- cluster = None
+ return utils.merge(
+ self.crags.order_by('name'),
+ self.clusters.order_by('name'),
+ 'name',
+ )