django rest 框架:类型错误:不可散列类型:“列表”

时间:2021-05-02 15:07:04

标签: python django django-rest-framework

我找不到问题请帮忙

我也用自定义模型尝试过这个没有用。 如您所见,我正在尝试执行 PUT、DELETE 和 GET 操作。

错误信息

<块引用>

异常类型:TypeError at /api/user/sagar/Exception Value: unhashable 类型:'list'

views.py

class ProfileApiView(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = serializer.RegisterUserSerializer
    permission_classes = [IsAuthenticated, ]
    lookup_field = ['username']

    def get_queryset(self):
        return User.objects.filter(username=self.request.user)

serializer.py

class RegisterUserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(required=True, validators=[
                                   UniqueValidator(queryset=User.objects.all())])
    username = serializers.CharField(required=True, validators=[
                                     UniqueValidator(queryset=User.objects.all())])
    password = serializers.CharField(
        write_only=True, required=True, validators=[validate_password])

    class Meta:
        model = User
        fields = ['email', 'username', 'password']

    def create(self, validated_data):
        user = User.objects.create(
            email=validated_data['email'],
            username=validated_data['username']
        )
        user.set_password(validated_data['password'])
        user.save()

        return user

1 个答案:

答案 0 :(得分:2)

来自DRF documentation

<块引用>

lookup_field - 应该用于执行单个模型实例的对象查找的模型字段。默认为“pk”。

它需要一个字段(作为字符串)而不是一个列表。

所以替换:

lookup_field = ['username']

lookup_field = 'username'