func (this *UserRouter) getFollows(user *models.User, following bool) []map[string]interface{} { limit := 20 var qs orm.QuerySeter if following { qs = user.FollowingUsers() } else { qs = user.FollowerUsers() } nums, _ := qs.Count() pager := this.SetPaginator(limit, nums) qs = qs.Limit(limit, pager.Offset()) var follows []*models.Follow if following { qs.RelatedSel("FollowUser").All(&follows, "FollowUser") } else { qs.RelatedSel("User").All(&follows, "User") } if len(follows) == 0 { return nil } ids := make([]int, 0, len(follows)) for _, follow := range follows { if following { ids = append(ids, follow.FollowUser.Id) } else { ids = append(ids, follow.User.Id) } } var eids orm.ParamsList this.User.FollowingUsers().Filter("FollowUser__in", ids).ValuesFlat(&eids, "FollowUser__Id") var fids map[int]bool if len(eids) > 0 { fids = make(map[int]bool) for _, id := range eids { tid, _ := utils.StrTo(utils.ToStr(id)).Int() if tid > 0 { fids[tid] = true } } } users := make([]map[string]interface{}, 0, len(follows)) for _, follow := range follows { IsFollowed := false var u *models.User if following { u = follow.FollowUser } else { u = follow.User } if fids != nil { IsFollowed = fids[u.Id] } users = append(users, map[string]interface{}{ "User": u, "IsFollowed": IsFollowed, }) } return users }