具有唯一约束的电子邮件字段阻止保存序列化程序的PUT方法。django rest_框架

具有唯一约束的电子邮件字段阻止保存序列化程序的PUT方法。django rest_框架,django,api,Django,Api,在我的api视图中创建对象时,它看起来不错,但每当我更新对象时,即使我没有更改我的电子邮件字段,它也会显示具有此电子邮件地址的用户已经存在。我正在使用泛型。RetrieveUpdateView用于我的视图 我认为泛型。RetrieveUpdateView会自动处理这个问题。我错过了什么 我的模型如下所示: class User(AbstractUser): email= models.EmailField(unique=True) ... class UserListForP

在我的api视图中创建对象时,它看起来不错,但每当我更新对象时,即使我没有更改我的电子邮件字段,它也会显示具有此电子邮件地址的
用户已经存在。
我正在使用
泛型。RetrieveUpdateView
用于我的视图

我认为
泛型。RetrieveUpdateView
会自动处理这个问题。我错过了什么

我的模型如下所示:

class User(AbstractUser):
    email= models.EmailField(unique=True)

    ...
class UserListForProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'username','email','last_login', 'date_joined','is_active', 'is_student', 'is_staff', 'is_teacher', 'is_registrar', 'is_superuser']
        read_only_fields = ('username','date_joined', 'last_login','is_active', 'is_student', 'is_staff', 'is_teacher', 'is_registrar', 'is_superuser')



class StaffProfileDetailSerializer(CreateProfileSerializer):
    user = UserListForProfileSerializer(many= False)
    class Meta:
        model = StaffProfile
        fields = ['user','first_name', 'middle_name', 'last_name', 'gender', 'employee_number', 'date_of_birth', 'mobile_number','dob_month','dob_day','dob_year','address',]
        read_only_fields = ('date_joined', 'last_login',)


class UserProfileDetail(generics.RetrieveUpdateAPIView):
    authentication_classes = [SessionAuthentication, BasicAuthentication]
    permission_classes = [IsAuthenticated]
    serializer_class = StaffProfileDetailSerializer

    def get_queryset(self, *args, **kwargs):
        userid = self.request.user.id
        return StaffProfile.objects.filter(pk= userid)

我的序列化程序如下所示:

class User(AbstractUser):
    email= models.EmailField(unique=True)

    ...
class UserListForProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'username','email','last_login', 'date_joined','is_active', 'is_student', 'is_staff', 'is_teacher', 'is_registrar', 'is_superuser']
        read_only_fields = ('username','date_joined', 'last_login','is_active', 'is_student', 'is_staff', 'is_teacher', 'is_registrar', 'is_superuser')



class StaffProfileDetailSerializer(CreateProfileSerializer):
    user = UserListForProfileSerializer(many= False)
    class Meta:
        model = StaffProfile
        fields = ['user','first_name', 'middle_name', 'last_name', 'gender', 'employee_number', 'date_of_birth', 'mobile_number','dob_month','dob_day','dob_year','address',]
        read_only_fields = ('date_joined', 'last_login',)


class UserProfileDetail(generics.RetrieveUpdateAPIView):
    authentication_classes = [SessionAuthentication, BasicAuthentication]
    permission_classes = [IsAuthenticated]
    serializer_class = StaffProfileDetailSerializer

    def get_queryset(self, *args, **kwargs):
        userid = self.request.user.id
        return StaffProfile.objects.filter(pk= userid)

我的观点是这样的:

class User(AbstractUser):
    email= models.EmailField(unique=True)

    ...
class UserListForProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'username','email','last_login', 'date_joined','is_active', 'is_student', 'is_staff', 'is_teacher', 'is_registrar', 'is_superuser']
        read_only_fields = ('username','date_joined', 'last_login','is_active', 'is_student', 'is_staff', 'is_teacher', 'is_registrar', 'is_superuser')



class StaffProfileDetailSerializer(CreateProfileSerializer):
    user = UserListForProfileSerializer(many= False)
    class Meta:
        model = StaffProfile
        fields = ['user','first_name', 'middle_name', 'last_name', 'gender', 'employee_number', 'date_of_birth', 'mobile_number','dob_month','dob_day','dob_year','address',]
        read_only_fields = ('date_joined', 'last_login',)


class UserProfileDetail(generics.RetrieveUpdateAPIView):
    authentication_classes = [SessionAuthentication, BasicAuthentication]
    permission_classes = [IsAuthenticated]
    serializer_class = StaffProfileDetailSerializer

    def get_queryset(self, *args, **kwargs):
        userid = self.request.user.id
        return StaffProfile.objects.filter(pk= userid)

URL.py:

urlpatterns = [
    path('api/', apiOverview, name='apioverview'),
    path('api/user/profile/detail/<int:pk>/', UserProfileDetail.as_view(), 
           name='userprofile-detail'),

    ...

]


urlpatterns=[
路径('api/',apiOverview,name='apiOverview'),
路径('api/user/profile/detail/',UserProfileDetail.as_view(),
name='userprofile-detail'),
...
]

显示视图的url模式
UserProfileDetail
@AbdulAzizBarkat我更新了我的问题,让您查看url.py