Проблема с обработкой вложенного словаря на Django Rest Framework

Тестирую Django Rest Framework. В результате POST запроса на ввод я получаю следующий JSON (здесь важно, что это ключи словаря, остальное мелочи):


    {
        "title": "Test title10",
        "description": "Test description10",
        "client": {
            "name": "Egor10",
            "surname": "Egor11",
            "phone": "1645342534532",
            "adress": "st. Egor9, 53453"
        },
        "products": ["Karamel", "Shokolad", "Limon", "Banan"],
        "delivery_adress": "st. Egor44",
        "delivery_date": "2022-23-09:44:00",
        "delivery_code": "4562gdgll"
    }

У меня есть две модели:

from django.db import models


class Client(models.Model):
    name = models.CharField(max_length=100, blank=True)
    surname = models.CharField(max_length=100, blank=True)
    phone = models.CharField(max_length=100, blank=True)
    adress = models.CharField(max_length=150, blank=True)


class Order(models.Model):
    title = models.CharField(max_length=100, blank=True)
    description = models.CharField(max_length=255, blank=True)
    delivery_code = models.CharField(max_length=50, blank=True)
    delivery_adress = models.CharField(max_length=150, blank=True)
    client = models.ForeignKey('Client', on_delete=models.CASCADE, null=True, related_name='orders')

Далее я хочу сделать сериализатор и посмотреть в сторону SlugRelatedField или Nested relationships для обработки вложенных словарных отношений:

"client": {
    "name": "Egor10",
    "surname": "Egor11",
    "phone": "1645342534532",
    "adress": "st. Egor9, 53453"
}

Для SlugRelatedField я попробовал эту историю в сериализаторе:

class OrderSerializer(serializers.ModelSerializer):
     orders = serializers.SlugRelatedField(
        read_only=True,
        slug_field='phone'
     )

    class Meta:
        model = Order
        fields = ['title', 'description', 'delivery_code', 'delivery_adress', 'orders']

В файле views.py я выполняю стандартную обработку:

def post(self, request):
    serializer = OrderSerializer(data=request.data)
    if serializer.is_valid(raise_exception=True):
        serializer.save()

И вся эта история не работает и чаще всего возникает KeyError: 'client' error, что в общем-то логично.

Подскажите, что я делаю неправильно и куда капать?

Спасибо.

Я думаю, что имя поля должно быть client, а не orders. Имя orders, которое является related_name, может быть использовано в модели client и ее сериализаторе.

class OrderSerializer(serializers.ModelSerializer):
     client = serializers.SlugRelatedField(
        read_only=True,
        slug_field='phone'
     )

    class Meta:
        model = Order
        fields = ['title', 'description', 'delivery_code', 'delivery_adress', 'client']
Вернуться на верх