版权声明:学习是一种信仰。喜欢就拿去,送人玫瑰手有余香。 https://blog.csdn.net/huoyuanshen/article/details/83308899
思路:form中get提交,后端获取,过滤掉不用的参数,剩下的组拼filter。
扩展:在heml定义规则标记,如__like结果,后端过滤__like标记,组拼filter,避免排除法遗漏导致查询错误。
1,前端样式与代码
<div class="col-sm-2"> <input class="form-control input-sm" type="text" name="PrivateIpAddresses__icontains" placeholder="内网IP" style=""/> </div>
__icontains 表示忽略大小写
2,跳转url代码:
path('ecs.html', views.EcsListAll.as_view(), name='ecs_list'),
3,views后代代码
class EcsListAll(LoginRequiredMixin, ListView): template_name = 'asset/ecs.html' model = Ecs queryset = Ecs.objects.all() ordering = ('-id',) def get_context_data(self, **kwargs): try: page = self.request.GET.get('page', 1) except p1 as e: page = 1 logger.error(e) p = p2(self.queryset, getattr(settings, 'DISPLAY_PER_PAGE'), request=self.request) asset_list = p.page(page) context = { "ecs_list": asset_list, 'ecs_count':self.queryset.count() if self.queryset != '' else 0, } kwargs.update(context) return super().get_context_data(**kwargs) def get_queryset(self): self.queryset = EcsQuerysetHandle(self.request) return self.queryset
EcsQuerysetHandle方法代码:
def EcsQuerysetHandle(request): user = User.objects.get(username=request.user) groups = [x['name'] for x in request.user.groups.values()] groups_update = [] filter_dict = {} for i in groups: if re.search('审批组', i) or re.search('IT运维', i): groups_update.append(i) for k, v in dict(request.GET).items(): if user.is_superuser or 'IT运维' in groups: if [i for i in v if i != ''] and (k != 'page' and k != 'order_by' and k != 'csrfmiddlewaretoken'): if '__in' in k: filter_dict[k] = v else: filter_dict[k] = v[0] else: if [i for i in v if i != ''] and (k != 'page' and k != 'order_by' and k != 'csrfmiddlewaretoken'): if '__in' in k: filter_dict[k] = v elif k == 'ServiceBusiness': if v[0] in groups_update: filter_dict['ServiceBusiness'] = v[0] else: filter_dict[k] = v[0] if filter_dict == {}: if user.is_superuser or 'IT运维' in groups: queryset = Ecs.objects.all() elif groups_update: filter_dict['ServiceBusiness__in'] = groups_update queryset = Ecs.objects.filter(**filter_dict) else: queryset = '' else: queryset = Ecs.objects.filter(**filter_dict) order_by_val = request.GET.get('order_by', '') if order_by_val: queryset = queryset.order_by(order_by_val) if queryset else queryset return queryset