From b057b16a8016dccb50dd4076d7861f34a5ae3574 Mon Sep 17 00:00:00 2001 From: ZhengYang Date: Tue, 5 Aug 2014 17:49:36 +0800 Subject: [PATCH] trim unused fields in result json --- g_models.go | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/g_models.go b/g_models.go index ed04bd6..4d0c70d 100644 --- a/g_models.go +++ b/g_models.go @@ -627,7 +627,7 @@ func Get{{modelName}}ById(id int) (v *{{modelName}}, err error) { // GetAll{{modelName}} retrieves all {{modelName}} matches certain condition. Returns empty list if // no records exist func GetAll{{modelName}}(query map[string]string, fields []string, sortby []string, order []string, - offset int64, limit int64) (l []{{modelName}}, err error) { + offset int64, limit int64) (ml []interface{}, err error) { o := orm.NewOrm() qs := o.QueryTable(new({{modelName}})) // query k=v @@ -675,9 +675,26 @@ func GetAll{{modelName}}(query map[string]string, fields []string, sortby []stri } } + var l []{{modelName}} qs = qs.OrderBy(sortFields...) if _, err := qs.Limit(limit, offset).All(&l, fields...); err == nil { - return l, nil + // trim unused fields + fieldMap := make(map[string]interface{}) + for _, v := range fields { + fieldMap[v] = true + } + for _, v := range l { + s := reflect.Indirect(reflect.ValueOf(v)) + typeOfS := s.Type() + for i := 0; i < s.NumField(); i++ { + f := s.Field(i) + if _, ok := fieldMap[typeOfS.Field(i).Name]; ok { + fieldMap[typeOfS.Field(i).Name] = f.Interface() + } + } + } + ml = append(ml, fieldMap) + return ml, nil } return nil, err }