Как заставить `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 созданным экземпляром.

Вернуться на верх