Custom decorator on class based views in django rest framework

Viewed 184

I have the following models in my application

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)

    employee_name = models.CharField(max_length=500, default=0)
    employee_email = models.EmailField(max_length=500, default=0)
    employee_phone = models.CharField(max_length=500, default=0)
    employee_city = models.CharField(max_length=500, default=0)
    employee_role = models.CharField(max_length=100, default='View')


class GroupModels(models.Model):

    model_coices = (('Product', 'Product'), ('Kit', 'Kit'), ('Vendor', 'Vendor'), ('Warehouse', 'Warehouse')
                    , ('Flow', 'Flow'), ('ReceiverClient', 'ReceiverClient'))

    models = models.CharField(max_length=500, default=0, choices=model_coices)


class Group(models.Model):


    name = models.CharField(max_length=500, default=0)
    emp = models.ForeignKey(Employee, on_delete=models.CASCADE)
    models = models.ManyToManyField(GroupModels)

This is an attempt to create custom permissions for every Employee to do something

Now I have the following View to create Product

class ProductCreateAPIView(CreateAPIView):
    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = ProductSerializer

    def post(self, request, *args, **kwargs):
        owner = request.user.pk
        d = request.data.copy()
        d['owner'] = owner
        serializer = ProductSerializer(data=d)

        if serializer.is_valid():
            serializer.save()
            print("Serializer data", serializer.data)
            o = Product.objects.get(id=serializer.data['id'])
            ow = User.objects.get(id=owner)
            Inventory.objects.create(product=o, quantity=0, owner=ow)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

How do I create a decorator to give access of this function to only those employees who have Product in the Group model?

0 Answers
Related