Python 重用DRF序列化程序时graphql中的KeyError

Python 重用DRF序列化程序时graphql中的KeyError,python,django,django-rest-framework,graphql,Python,Django,Django Rest Framework,Graphql,因此,我试图实现graphql并重用我的serializer.py文件,但得到的是“名称‘请求’未定义”。我可以看到它在序列化程序上引用了什么,但不知道如何修复它。它似乎挂在self.context[“request”]上,我在使用drf时常常从put方法中弹出密码字段。关于如何最好地解决这个问题,有什么想法吗。我仍在学习,似乎正在碰壁。任何帮助都将不胜感激。先谢谢你 序列化程序.py class UserSerializer(serializers.ModelSerializer):

因此,我试图实现graphql并重用我的serializer.py文件,但得到的是“名称‘请求’未定义”。我可以看到它在序列化程序上引用了什么,但不知道如何修复它。它似乎挂在self.context[“request”]上,我在使用drf时常常从put方法中弹出密码字段。关于如何最好地解决这个问题,有什么想法吗。我仍在学习,似乎正在碰壁。任何帮助都将不胜感激。先谢谢你

序列化程序.py

class UserSerializer(serializers.ModelSerializer):
    """Serializes the user model"""

    # name = serializers.CharField(max_length=10)
    specialties = serializers.PrimaryKeyRelatedField(
        many=True, queryset=models.Specialty.objects.all()
    )

    class Meta:
        model = models.User
        fields = "__all__"
        extra_kwargs = {
            "password": {"write_only": True, "style": {"input_type": "password"}}
        }

    def __init__(self, *args, **kwargs):
        super(UserSerializer, self).__init__(*args, **kwargs)
        if self.context["request"].method == "PUT":
            self.fields.pop("password")

    def create(self, validated_data):
        """Create and return a new user"""
        user = models.User.objects.create_user(
            email=validated_data["email"],
            first_name=validated_data["first_name"],
            last_name=validated_data["first_name"],
            password=validated_data["password"],
        )

        return user
class CreateUser(SerializerMutation):
    class Meta:
        serializer_class = UserSerializer
突变。py

class UserSerializer(serializers.ModelSerializer):
    """Serializes the user model"""

    # name = serializers.CharField(max_length=10)
    specialties = serializers.PrimaryKeyRelatedField(
        many=True, queryset=models.Specialty.objects.all()
    )

    class Meta:
        model = models.User
        fields = "__all__"
        extra_kwargs = {
            "password": {"write_only": True, "style": {"input_type": "password"}}
        }

    def __init__(self, *args, **kwargs):
        super(UserSerializer, self).__init__(*args, **kwargs)
        if self.context["request"].method == "PUT":
            self.fields.pop("password")

    def create(self, validated_data):
        """Create and return a new user"""
        user = models.User.objects.create_user(
            email=validated_data["email"],
            first_name=validated_data["first_name"],
            last_name=validated_data["first_name"],
            password=validated_data["password"],
        )

        return user
class CreateUser(SerializerMutation):
    class Meta:
        serializer_class = UserSerializer
错误

/graphql处的键错误/ “请求” 请求方法:获取 请求URL:http://localhost:8000/graphql/ Django版本:3.0.10 异常类型:KeyError 异常值: “请求” 异常位置:/dsinfinity/backend/ds_admin/serializers.py在uu init_uuuuuuuu66行 Python可执行文件:/usr/local/bin/Python Python版本:3.7.9 Python路径: ['/dsinfinity/backend',, “/usr/local/lib/python37.zip”, “/usr/local/lib/python3.7”, “/usr/local/lib/python3.7/lib dynload”, '/usr/local/lib/python3.7/site-packages'] 服务器时间:周四,2020年10月1日21:24:51+0000 回溯切换到复制和粘贴视图 /内部文件中的usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py 响应=获取响应(请求)… ▶ 局部变量 /响应中的usr/local/lib/python3.7/site-packages/django/core/handlers/base.py 响应=自身。通过中间件(e,请求)处理异常… ▶ 局部变量 /响应中的usr/local/lib/python3.7/site-packages/django/core/handlers/base.py 响应=包装的回调(请求,*回调参数,**回调参数)… ▶ 局部变量 /包装视图中的usr/local/lib/python3.7/site-packages/django/views/decorators/csrf.py 返回视图函数(*args,**kwargs)… ▶ 局部变量 /视图中的usr/local/lib/python3.7/site-packages/django/views/generic/base.py self=cls(**initkwargs)… ▶ 局部变量 /usr/local/lib/python3.7/site-packages/graphene\u django/views.py in\u\u init__ schema=graphene\u settings.schema… ▶ 局部变量 /usr/local/lib/python3.7/site-packages/graphene\u django/settings.py in\u\u getattr__ val=执行导入(val,attr)… ▶ 局部变量 /执行导入中的usr/local/lib/python3.7/site-packages/graphene\u django/settings.py 从字符串返回导入字符串(val,设置名称)… ▶ 局部变量 /从字符串导入中的usr/local/lib/python3.7/site-packages/graphene\u django/settings.py module=importlib.import\u模块(模块路径)… ▶ 局部变量 /导入模块中的usr/local/lib/python3.7/importlib/\uuuuuu init\uuuuuuuuu.py 返回_bootstrap._gcd_导入(名称[级别:],包,级别)… ▶ 局部变量 输入 … ▶ 局部变量 在“查找”和“加载”中 … ▶ 局部变量 在"查找"和"加载"中解锁 … ▶ 局部变量 在(加载)中(未锁定) … ▶ 局部变量 在exec_模块中 … ▶ 局部变量 在已删除帧的情况下调用 … ▶ 局部变量 /中的dsinfinity/backend/dsinfinity/schema.py 导入ds_admin.schema… ▶ 局部变量 /中的dsinfinity/backend/ds_admin/schema.py 类CreateUser(SerializerMutation):… ▶ 局部变量 /usr/local/lib/python3.7/site-packages/graphene/utils/subclass_和u meta.py在uuu init_子类中__ 超级类。uuu初始化子类u,带u元uuu(**选项)… ▶ 局部变量 /usr/local/lib/python3.7/site-packages/graphene_django/rest_framework/mutation.py in_uuuuinit_subclass_uwith_meta__ serializer=序列化程序\u类()… ▶ 局部变量 /初始化中的dsinfinity/backend/ds_admin/serializers.py__ 如果self.context[“request”].method==“PUT”:… ▶ 局部变量