Как обновить два поля таблицы модели одним запросом в django rest api

у меня есть две таблицы пользователь и адрес. таблица адрес имеет отношение внешнего ключа с таблицей пользователь. как получить доступ к полям обеих таблиц и обновить их в одном вызове запроса

?

{ "first_name": "abijith", "last_name": "manu", "profile_picture": "http://127.0.0.1:8000/media/profile_pictures/my_pic_RxnXQ6n.jpg", "date_of_birth": "2024-02-16", "username": "", "gender": "male", "email": "doc@gmail.com", "phone_number": "7306986870", "addresses": [ { "street": "xvsvf", "city": "sss", "state": "ssss", "country": "ggggggggg", "zip_code": "sssssss" } ] Это пример формы ответа, который я хочу получить. и мне нужно обновить заполненные файлы

Вы можете архивировать эти штуки с помощью вложенного сериализатора

serializers.py

from rest_framework import serializers

class AddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = Address
        fields = ['street', 'city', 'state', 'country', 'zip_code']

class UserSerializer(serializers.ModelSerializer):
    addresses = AddressSerializer(many=True)

    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'profile_picture', 'date_of_birth', 'username', 'gender', 'email', 'phone_number', 'addresses']

    def create(self, validated_data):
        addresses_data = validated_data.pop('addresses')
        user = User.objects.create(**validated_data)
        for address_data in addresses_data:
            Address.objects.create(user=user, **address_data)
        return user

    def update(self, instance, validated_data):
        addresses_data = validated_data.pop('addresses')
        instance = super(UserSerializer, self).update(instance, validated_data)

        # Assuming you don't want to add new addresses, but update existing ones
        for address_data in addresses_data:
            address_instance = instance.addresses.get(pk=address_data.get('id'))
            AddressSerializer().update(address_instance, address_data)

        return instance

views.py

class UserUpdateView(generics.UpdateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
Вернуться на верх