有没有什么方法可以优化下面的代码而不是为每个模型创建

时间:2021-05-25 07:50:47

标签: django django-rest-framework

我已经根据用户角色为我的 Django Web 应用程序创建了全局搜索功能。 但是不是在每个模型中添加权限,而是如何制作一个通用功能并将其添加到每个模型中以获得API。您的建议和指南将不胜感激。 请帮我解决这个问题。

提前致谢。

from django . shortcuts import render
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
# Create your views here.
from apps. events.models import Event
from apps. events.serializers import EventSerializer

from apps. inquiry. models import Newinquiry, from apps. inquiry.serializers import NewinquirySerializer

from apps.customer_po.models import PoDetail
from apps.customer_po.serializers import POSerializer

from apps.customer.models import Customer
from apps.customer.serializers.customer import CustomerSerializer

from django .db.models import Q

class SearchView(APIView):
    
    def get(self, request):
        user = self.request.user
        data = {}
        q = request.GET.get('q','')

        customer_obj = Customer.objects.filter(Q(customer__icontains=q) | Q(country__icontains=q) | Q (industry__industry__icontains=q) | Q(location__icontains=q) | Q(outcome__icontains=q) | Q(contact_person__icontains=q))
        data['customers'] = CustomerSerializer(customer_obj, many=True, context={'request': request}).data
        
        if user.groups.name in ['CEO', 'Admin']:
            resp = {'data':CustomerSerializer(Customer.objects.all(), many=True).data}
        elif user.groups.name == 'Manager':
            resp = {'data':CustomerSerializer(Customer.objects.filter( Q(created_by=user) | 
 Q(created_by__reports_to=user) ), many=True).data}
        else:
            resp = {'data':CustomerSerializer(Customer.objects.filter(assigned_to=user), many=True).data}
            return Response(resp, status=status.HTTP_200_OK) 

        # events_obj = Event.objects.filter(Q(status_type__icontains=q) | Q(customer_name__customer__icontains=q) | Q(activity_type__icontains=q) | Q(priority_type__icontains=q) | Q(visibility_type__icontains=q) | Q(organization_type__icontains=q) |Q(contact_name__icontains=q) | Q(location__icontains=q) | Q(subject__icontains=q))
        # data['events'] = EventSerializer(events_obj, many=True, context={'request': request}).data

        # if user.groups.name in ['CEO', 'Admin']:
        #     resp = {'data':EventSerializer(Event.objects.all(), many=True).data}
        # elif user.groups.name == 'Manager':
        #     resp = {'data':EventSerializer(Event.objects.filter( Q(created_by=user) | Q(created_by__reports_to=user) ), many=True).data}
        # else:
        #     resp = {'data':EventSerializer(Event.objects.filter(assigned_to=user), many=True).data}
        #     return Response(resp, status=status.HTTP_200_OK)

     
        # inquiry_obj = Newinquiry.objects.filter(Q(customername__icontains=q) | Q(types__icontains=q) | Q(region__icontains=q) |Q(owner__icontains=q) | Q(irr_no__icontains=q) | Q(contactperson__icontains=q) | Q(targetdate__icontains=q) | Q(briefinquirydescription__icontains=q))
        # data['inquirys'] = NewinquirySerializer(inquiry_obj, many=True, context={'request': request}).data

        # if user.groups.name in ['CEO', 'Admin']:
        #     resp1 = {'data':NewinquirySerializer(Newinquiry.objects.all(), many=True).data}
        # elif user.groups.name == 'Manager':
        #     resp1 = {'data':NewinquirySerializer(Newinquiry.objects.filter( Q(created_by=user) | Q(created_by__reports_to=user) ), many=True).data}
        # else:
        #     resp1 = {'data':NewinquirySerializer(Newinquiry.objects.filter(assigned_to=user), many=True).data}
        #     return Response(resp1, status=status.HTTP_200_OK)

        # customer_po_obj = PoDetail.objects.filter(Q(customer_name__customer__icontains=q) | Q(region__icontains=q) | Q(designer_name__icontains=q) | Q(po_no__icontains=q) | Q(quotation_no__icontains=q) | Q(place_of_delivery__icontains=q) | Q(ssi_no__icontains=q) | Q(invoice_to__icontains=q) | Q(consignee__icontains=q))
        # data['customer_po'] = POSerializer(customer_po_obj,many=True,context={'request':request}).data

        # if user.groups.name in ['CEO', 'Admin']:
        #     resp2 = {'data':PoSerializer(PoDetail.objects.all(), many=True).data}
        # elif user.groups.name == 'Manager':
        #     resp2 = {'data':PoSerializer(PoDetail.objects.filter( Q(created_by=user) | Q(created_by__reports_to=user) ), many=True).data}
        # else:
        #     resp2 = {'data':PoSerializer(PoDetail.objects.filter(assigned_to=user), many=True).data}
        #     return Response(resp2, status=status.HTTP_200_OK)
       
   
        return Response(data)

0 个答案:

没有答案