Я изучаю и знаком с Django Rest Framework, и у меня возникла проблема с проверками сериализатора и методом обновления ListSerializer.
У меня есть класс APIView, который обрабатывает запрос put.Я просто хотел получить пользовательскую проверку и поэтому я переопределил метод проверки в классе сериализатора.
Из почтальона я отправляю данные JSON в этот класс APIView.
Пример данных JASON:
[
{
"id": 1,
"ip": "10.1.1.1",
"host_name": "hostname 1"
},
{
"id": 2,
"ip": "10.1.1.2",
"host_name": "hostname 2"
}
]
Когда я получаю данные и выполняю serializer.is_valid (), он передает поток переопределенной функции проверки.Но там, когда я проверяю аргумент attrs, я получаю все поля, кроме id.Ключ и значение для id отсутствуют.Он показывает None.
Та же проблема возникла у меня, когда я пытался переопределить метод обновления в ListSerializer.
, когда я попробовал приведенный ниже код в методе обновления ListSerializer,
data_mapping = {item['id']: item for item in validated_data}
Я получил сообщение об ошибке KeyError 'id'.
Кажется, он не принимает поле id, и я не уверен, почему!Пожалуйста, кто-нибудь объяснит мне, если я где-то ошибаюсь.
Класс сериализатора
from rest_framework import serializers
from .models import NoAccessDetails
class NoAccessDetailsListSerializer(serializers.ListSerializer):
def update(self, instance, validated_data)
data_mapping = {data.id: data for data in instance}
#Here I'm getting KeyError ID
validated_data_mapping = {item['id']: item for item in validated_data}
return
class NoAccessDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = NoAccessDetails
list_serializer_class = NoAccessDetailsListSerializer
fields = ("id", "ip", "host_name")
def validate(self, data):
id_val = data.get('id')
ip = data.get('ip')
host_name = data.get('host_name')
#here the id value is None
print('id val {} '.format(id_val))
return data