Как заставить `ModelSerializer` в `DRF` не игнорировать поле `id`?
У меня проблема во вложенных ModelSerialzier
в DRF
.
Мой код
models.py
class ModelA(models.Model):
name = models.CharField(max_length=50)
class ModelB(models.Model):
some = models.CharField(max_length=50, blank=True, null=True)
model_a = models.ForeignKey(ModelA, on_delete=models.CASCADE)
views.py
class CreateModelA(GenericAPIView):
serializer_class = ModelASeri
def post(self, request):
serializer = ModelASeri(data=request.data)
if serializer.is_valid():
serializer.create(serializer.data)
return Response({"status": "OK"})
return Response({"status": "error", "error": serializer.errors})
serializers.py
class ModelBSeri(serializers.ModelSerializer):
class Meta:
model = ModelB
fields = ("id", "some")
class ModelASeri(serializers.ModelSerializer):
model_b = ModelBSeri(many=True, required=False)
class Meta:
model = ModelA
fields = ("__all__")
def create(self, validated_data):
model_b = validated_data.pop("model_b", None)
model_a = super().create(validated_data)
print(model_b)
if model_b:
for model in model_b:
obj = ModelB.objects.get(model["id"])
obj.model_a = model_a
obj.save()
return model_a
Моя проблема в том, что когда я пытаюсь получить доступ к model["id"]
, я получаю KeyError
.
Функция print
даст мне следующее:
[OrderedDict([('some', None)])]
поле id
здесь игнорируется
Я пытаюсь сделать следующее: я хочу иметь представление, которое создает ModelA
и связывает необходимые поля, которые относятся к созданному экземпляру ModelA
.
Мой вход Пример:
{
"name": "test name",
"model_b": [
{
"id": 1
},
{
"id": 2
}
]
}
Здесь я хочу создать ModelA
с name=test name
и связать ModelB
экземпляры с идентификаторами: [1, 2] с ModelA
созданным экземпляром.