외래 키가있는 모델에 대한 serializer가 있습니다. 요구 사항은 생성시 외래 키를 관련 모델의 기존 개체로 설정할 수 있지만 업데이트시에는 관련 개체를 변경할 수 없습니다. 나는 이것을 사용자 정의 update()
에서 확인할 수 있지만이를 확인하기 위해 시리얼 라이저 유효성 검사를 사용하는 것이 더 우아 할까? 그러나 나는 어떻게 확신 할 수 없다. 예제 코드 :DRF에서 업데이트시 필드의 유효성을 검사하는 방법은 무엇입니까?
class Person(models.Model):
name = models.CharField(max_length=256)
spouse = models.ForeignKey(Person)
class PersonSerializer(serializers.ModelSerializer):
class Meta:
model = Person
# this is how I know how to do this
def create(self, validated_data):
try:
spouse = Person.objects.get(pk=int(validated_data.pop('spouse')))
except Person.DoesNotExist:
raise ValidationError('Imaginary spouses not allowed!')
return Person.objects.create(spouse=spouse, **validation_data)
def update(self, person, validated_data):
if person.spouse.pk != int(validated_data['spouse']):
raise ValidationError('Till death do us part!')
person.name = validation_data.get('name', person.name)
person.save()
return person
# the way I want to do this
def validate_spouse(self, value):
# do validation magic