Update / patch / creation of nested models in the Django Rest platform

I am using Django 1.6.8 and Django Rest 2.4.4. I have a Person model with separate models for Address and PhoneNumbers.

class Person(models.Model):
    address = models.OneToOneField(Address, blank=True, null=True)
    phoneNumbers = models.ManyToManyField(PhoneNumber, blank=True)

class Address(models.Model):
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=50)
    state = models.CharField(max_length=2)

class PhoneNumber(models.Model):
    number = models.CharField(max_length=15)
    numberType = models.CharField(default='Mobile', max_length=15)

I use nested serializers in a Django REST framework.

class PersonSerializer(serializers.HyperlinkedModelSerializer):
    id = serializers.Field('id')

    address = AddressSerializer(source='address')
    phoneNumbers = PhoneNumberSerializer(many=True)

This works for GET (I get the address and phone numbers as nested json fields), but I need the same for PUT / POST / PATCH. In particular, for each phone number, I want it to be updated if the identifier is specified or created if there is no identifier in json. And the same for the address, all in the same API call.

+4
source share
1 answer

create() / update().

Django Rest doc , Django Rest 3.0:

, .

class UserSerializer(serializers.ModelSerializer):
    profile = ProfileSerializer()

    class Meta:
        model = User
        fields = ('username', 'email', 'profile')

    def create(self, validated_data):
        profile_data = validated_data.pop('profile')
        user = User.objects.create(**validated_data)
        Profile.objects.create(user=user, **profile_data)
        return user

(...)

, REST framework 3 , . ModelSerializer.create() .update() .

+7

Source: https://habr.com/ru/post/1569287/


All Articles