如何在APIView中自定义架构

时间:2019-07-18 04:06:22

标签: django

我有两个类,CustomAPIView和ContestMessageAPI,其中ContestMessageAPI继承自CustomAPIView。具体结构如下(忽略不相关的方法):

class CustomAPIView(APIView):
    """
        Custom APIView
    """
    authentication_classes = (JSONWebTokenAuthentication,)


class ContestMessageAPI(CustomAPIView):
    """
        Pass in the contest_id to get the corresponding match information
    """

现在,我正在修改ContestMessageAPI类中的参数,以便可以实现功能。

class ContestMessageAPI(CustomAPIView):
    """
        Pass in the contest_id to get the corresponding match information
    """
    parameter = {'contest_id': 'Field description'}
    schema = AutoSchema(manual_fields=[
        coreapi.Field(name=k, required=True, location="form",
                      schema=coreschema.String(description=v)) for k, v in parameter.items()
    ])

由于分配给架构代码的片段是固定的,因此我想将此代码移植到其父类CustomAPIView,并且CustomAPIView变为

class CustomAPIView(APIView):
    """
        自定义的APIView
    """
    authentication_classes = (JSONWebTokenAuthentication,)
    parameter = {'contest_id':'字段描述'}
    schema = AutoSchema(manual_fields=[
        coreapi.Field(name=k, required=True, location="form",
                      schema=coreschema.String(description=v)) for k, v in parameter.items()
    ])

然后,我想在ContestMessageAPI中配置参数变量以实现修改其父类的架构,但是发现失败。查询数据后,原因可能是:加载成员变量的规则是先加载父类的成员变量,然后再加载该类的成员变量,这导致该类的配置无效;因为先执行父类的成员变量。在CustomAPIView的每个子类中进行单独配置可以解决该问题,但这将在每个子类中编写重复的代码,这是非常面向对象的。有什么办法可以解决这个问题?

0 个答案:

没有答案