diff --git a/circle/dashboard/views.py b/circle/dashboard/views.py index d022490..c75cb54 100644 --- a/circle/dashboard/views.py +++ b/circle/dashboard/views.py @@ -1132,7 +1132,7 @@ class VmList(LoginRequiredMixin, FilterMixin, ListView): queryset = Instance.get_objects_with_level( 'user', self.request.user).filter(destroyed_at=None) - self.create_fake_get_for_filter() + self.create_fake_get() sort = self.request.GET.get("sort") # remove "-" that means descending order # also check if the column name is valid @@ -1143,11 +1143,23 @@ class VmList(LoginRequiredMixin, FilterMixin, ListView): return queryset.filter(**self.get_queryset_filters() ).select_related('owner', 'node') - def create_fake_get_for_filter(self): + def create_fake_get(self): + """ + Updates the request's GET dict to filter the vm list + For example: "name:xy node:1" updates the GET dict + to resemble this URL ?name=xy&node=1 + + "name:xy node:1".split(":") becomes ["name", "xy node", "1"] + we pop the the first element and use it as the first dict key + then we iterate over the rest of the list and split by the last + whitespace, the first part of this list will be the previous key's + value, then last part of the list will be the next key. + The final dict looks like this: {'name': xy, 'node':1} + """ s = self.request.GET.get("s") if s: s = s.split(":") - if len(s) < 2: + if len(s) < 2: # if there is no ':' in the string, filter by name got = {'name': s[0]} else: latest = s.pop(0)