मेरे पास एक विदेशी कुंजी के साथ एक मॉडल के लिए एक धारावाहिक है। आवश्यकता यह है कि बनाने पर, विदेशी कुंजी को संबंधित मॉडल से किसी भी मौजूदा ऑब्जेक्ट पर सेट किया जा सकता है, लेकिन अद्यतन पर संबंधित ऑब्जेक्ट को बदला नहीं जा सकता है। मैं इसे कस्टम update()
में देख सकता हूं, लेकिन यह जांचने के लिए सीरियलाइज़र सत्यापन का उपयोग करने के लिए और अधिक सुरुचिपूर्ण होगा? लेकिन मुझे यकीन नहीं है कि कैसे। उदाहरण कोड:डीआरएफ में अपडेट पर फ़ील्ड को कैसे सत्यापित करें?
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