作者:手机用户2502862793 | 来源:互联网 | 2023-09-25 16:44
Ihaveaserializerforamodelwithaforeignkey.Therequirementisthatoncreate,foreignkeyc
I have a serializer for a model with a foreign key. The requirement is that on create, foreign key can be set to any existing object from the related model, but on update the related object cannot be changed. I can check this in the custom update()
, but it would be more elegant to use serializer validation to check for this? But I am not sure how. Example code:
我有一个带有外键的模型的序列化器。需求是在创建时,可以将外键设置为与相关模型中的任何现有对象,但是更新相关对象时不能更改。我可以在custom update()中检查这个,但是使用serializer验证来检查这个是否更好?但我不知道该怎么做。示例代码:
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
1 个解决方案