首页 > 解决方案 > 当 API Endpoint 的字段名称与具有 Django Rest 框架的模型不同时的嵌套模型

问题描述

假设我收到以下 json:

{
    "id": 1234,
    "created_at": "2019-10-22T14:18:09-04:00",
    "person": {
        "id": 7234,
        "name": "John Smith"
    },
    "ticket": {
        "id": 5432,
        "person_id": 7234,
        "name": "How to fix this function?"
    }
}

我想序列化然后保存到带有下表的数据库中:事件、人员和票证,其中票证描述如下:

class Person(models.Model):
    id = models.PositiveIntegerField(primary_key=True)
    name = models.CharField(max_length=100)

class Ticket(models.Model):
    id = models.PositiveIntegerField(primary_key=True)
    person = models.ForeignKey('Person')
    name = models.CharField(max_length=100)

class Event(models.Model):
    id = models.PositiveIntegerField(primary_key=True)
    person = models.ForeignKey('Person')
    ticket = models.ForeignKey('Ticket')
    created_at = models.DateTimeField()

Ticket Serializer 应该是什么样子?目前,我有什么不起作用:

class TicketSerializer(serializers.ModelSerializer):
    person_id = serializers.IntegerField()

    class Meta:
        model = models.Ticket

    def to_internal_value(self, data):
        try:
            data['person'] = data['person_id']
        except KeyError:
            pass

       return super().to_internal_value(data)

class EventSerializer(UniqueFieldsMixin, NestedCreateMixin, serializers.ModelSerializer):
    person = PersonSerializer()
    ticket = TicketSerializer()

    class Meta:
        model = models.Event

我得到的错误是:

rest_framework.exceptions.ValidationError: {'ticket': {'person': [ErrorDetail(string='Invalid pk "7234" - object does not exist.', code='does_not_exist')]}}

标签: pythondjangodjango-rest-framework

解决方案


推荐阅读