From 2688753879b5be08a66979dcdf5b51f1384e9382 Mon Sep 17 00:00:00 2001 From: wanyaoqi Date: Mon, 5 Aug 2019 12:00:51 +0800 Subject: [PATCH] secgroups get distinct tenant --- pkg/compute/models/secgroups.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pkg/compute/models/secgroups.go b/pkg/compute/models/secgroups.go index c810dfb3c6..fbddb0fd48 100644 --- a/pkg/compute/models/secgroups.go +++ b/pkg/compute/models/secgroups.go @@ -95,6 +95,19 @@ func (manager *SSecurityGroupManager) ListItemFilter(ctx context.Context, q *sql return q, nil } +func (manager *SSecurityGroupManager) QueryDistinctExtraField(q *sqlchemy.SQuery, field string) (*sqlchemy.SQuery, error) { + switch field { + case "tenant": + tenantCacheQuery := db.TenantCacheManager.Query("name", "id").Distinct().SubQuery() + q.AppendField(tenantCacheQuery.Field("name", "tenant")) + q = q.Join(tenantCacheQuery, sqlchemy.Equals(q.Field("tenant_id"), tenantCacheQuery.Field("id"))) + q.GroupBy(tenantCacheQuery.Field("name")) + default: + return nil, httperrors.NewBadRequestError("unsupport field %s", field) + } + return q, nil +} + func (manager *SSecurityGroupManager) OrderByExtraFields(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*sqlchemy.SQuery, error) { q, err := manager.SVirtualResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query) if err != nil {