django rest 框架中基于类的视图上的自定义装饰器

时间:2021-03-22 10:42:47

标签: django django-rest-framework

我的应用程序中有以下模型

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)

这是尝试为每个 Employee 创建自定义权限以执行某些操作

现在我有以下视图来创建 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)

我如何创建一个装饰器来只允许那些在 Product 模型中有 Group 的员工访问这个函数?

0 个答案:

没有答案