我一直在研究 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()
答案 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()