User
에 대한 ForeignKey가있는 Manager
모델이 있습니다. 는 화주를 업데이트하려면, 나는 {"user": {"first_name": "John", "last_name": "Doe", "email": "[email protected]"}
Django Rest Framework의 중첩 시리얼 라이저를 사용하는 serializer 필드 유효성 검사
class CompanyManagerMeSerializer(serializers.ModelSerializer):
user = UserMeSerializer()
company = CompanyFullSerializer()
def update(self, instance, validated_data):
user_data = validated_data.pop('user', {})
user = instance.user
for key, val in user_data.items():
setattr(user, key, val)
user.save()
company_data = validated_data.pop('company', {})
company = instance.company
for key, val in company_data.items():
setattr(company, key, val)
company.save()
for key, val in validated_data.items():
setattr(instance, key, val)
instance.save()
return instance
class Meta:
model = CompanyManager
fields = ("pk", "user", "company", "display_name")
read_only_fields = ("display_name",)
처럼 중첩 된 객체와 PATCH
방법을 보내기 나는 UserMeSerializer
의 email
필드 유효성 검사기를 추가 할 때까지 모두 잘 작동했다 : 지금
class UserMeSerializer(serializers.ModelSerializer):
email = serializers.EmailField(
validators=[UniqueValidator(
queryset=User.objects.all(),
message=_("This email address is already used.")
)]
)
class Meta:
model = User
fields = (
'pk', 'first_name', 'last_name', 'username', 'email', 'date_joined', 'last_login'
)
read_only_fields = ('pk', 'date_joined', 'last_login')
UserMeSerializer가 instance
매개 변수를 가져 오지 않아 유효성 검사가 실패하므로 고유 한 확인을 통해 찾은 이메일 주소가 확인 중임을 알 수 없습니다. see the source of UniqueValidator
제 질문은 : companymanager.user
인스턴스에서 작업하고 있다고 UserMeSerializer
에게 어떻게 알릴 수 있습니까? is_valid
을 덮어 써야합니까?