'How I can update nested relationships

I'm learn DRF, trying write simple monitoring system for computers. With client I havent problem, but with server have one - UPDATE foreign key.

Code - https://pastebin.com/HgKXKNh0

How I can known pk for Disk and NetAdapter in

        for disk_data in disks_data:
            Disks.objects.update(client=instance, **disk_data)
 
        for adapter_data in net_adapter_data:
            NetAdapter.objects.update(client=instance, **adapter_data)

def create(self, validated_data) from https://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers, I tried to do the same update, but it didn't work.



Solution 1:[1]

I think you need to change some logic in update method.

def update(self, instance, validated_data):
    disks_data = validated_data.pop('disk')
    net_adapter_data = validated_data.pop('adapter')
    
    for attr, value in validated_data.items():
        setattr(instance, attr, value)

    for disk_data in disks_data:
        if 'id' in disk_data.keys():
            disk_id = disk_data.pop('id')
            Disks.objects.filter(id = disk_id).update(client = instance, **disk_data)
        else:
            Disks.objects.create(client = instance, **disk_data)

    for adapter_data in net_adapter_data:
        if 'id' in adapter_data.keys():
            adapter_id = adapter_data.pop('id')
            NetAdapter.objects.filter(id = adapter_id).update(client = instance, **adapter_data)
        else:
            NetAdapter.objects.create(client=instance, **adapter_data)

    return instance

Hope it could help.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 David Lu