使用旧电子邮件更新电子邮件时,UniqueValidator 抛出错误

时间:2021-02-25 16:03:34

标签: python django django-rest-framework

我一直在研究 django 序列化程序。下面是我的代码

class UpdateTravelAgentStaffSerializer(ModelSerializer):
      model = User
      fields = (
            'full_name',
            'position',
            'email',
        )
        extra_kwargs = {
            'full_name': {
                'required': True,
            }}

当我创建新的 Travel Agent Staff 时,电子邮件唯一的电子邮件验证器的验证器运行良好。现在在更新期间,我在添加 TravelAgentStaff 期间添加了相同的验证,现在我收到错误消息,说电子邮件必须是唯一的。我在更新中应用的验证是作为。

extra_kwargs = {
            'email': {
                'validators': [
                    UniqueValidator(
                        queryset=User.objects.all()
                    )
                ]
            }
        }

所以我尝试了

 def validate_email(self, value):
        self.value= value

现在我不知道如何检查唯一的电子邮件,如果当前用户的电子邮件没有改变,则需要允许它。 我在这里添加了我的观点

class UpdateTravelAgentStaffView(generics.UpdateAPIView, TravelAgentMixin):
    """
    Use this end-point to update specific travel agent  staff
    """
    serializer_class = travel_agent_staff_serializers.UpdateTravelAgentStaffSerializer
    # permission_classes = (IsOwnBusCompanyStaff,)

    def get_object(self):
        obj = self.get_travel_agent()
        # self.check_object_permissions(self.request, obj)
        return obj

    def perform_update(self, serializer):
        return travel_agent_staff_usecases.UpdateTravelAgentStaffUseCase(
            serializer=serializer,
            travel_agent_staff=self.get_object()
        ).execute()

1 个答案:

答案 0 :(得分:0)

基于更新的问题,

您只需在 perform_update 中更新代理的详细信息,只需调用 serializer.save() 方法即可。这将在内部调用序列化程序的 update 方法,该方法将执行所需操作。

def perform_update(self, serializer):
        serializer.save()         # this will update the details 
        return travel_agent_staff_usecases.UpdateTravelAgentStaffUseCase(
            serializer=serializer,
            travel_agent_staff=self.get_object()
        ).execute()