Django REST API嵌套值已更新(如果存在)

Django REST API嵌套值已更新(如果存在),django,django-rest-framework,nested,Django,Django Rest Framework,Nested,我有一个Django项目,其中我有一个项目表、客户表和联系人表。项目对客户和联系人都有外键,联系人对客户有外键。我正在使用Django REST API从服务器获取数据,当我获得一个项目实例时,我希望能够看到联系人字段(至少是其中的一些字段),当我创建/更新一个项目时,我应该能够包括一个联系人。如果联系人不存在,则应创建该联系人;如果联系人确实存在,则可能会对其进行更新。我一直在尝试使用Djangos“update_或_create”,但是,如果联系人已经存在,在我进入create函数之前,我会

我有一个Django项目,其中我有一个项目表、客户表和联系人表。项目对客户和联系人都有外键,联系人对客户有外键。我正在使用Django REST API从服务器获取数据,当我获得一个项目实例时,我希望能够看到联系人字段(至少是其中的一些字段),当我创建/更新一个项目时,我应该能够包括一个联系人。如果联系人不存在,则应创建该联系人;如果联系人确实存在,则可能会对其进行更新。我一直在尝试使用Djangos“update_或_create”,但是,如果联系人已经存在,在我进入create函数之前,我会得到一个带有“这个名字的联系人已经存在”的响应。知道为什么会这样吗

项目视图:

class ProjectViewSet(ModelViewSet):
    queryset = Project.objects.all()
    serializer_class = ProjectSerializer
ProjectSerializer类的示例

class ProjectSerializer(DynamicFieldsModelSerializer, ModelSerializer):

    contact_person = ContactPersonSerializer(required=False)


    class Meta:
        model = Project
        fields = '__all__'

    def to_representation(self, instance):

        if instance.customer:
            rep['customer'] = instance.customer.name
        return rep

    def create(self, validated_data):
        contact_person = validated_data.pop('contact_person')
        contact_person, created = ContactPerson.objects.update_or_create(name=contact_person['name'], 
            defaults={'phone': contact_person['phone'], 'customer': Customer.objects.get(pk=contact_person['customer'].id)})

        project = Project.objects.create(**validated_data, contact_person=contact_person)

        return project
请求示例:

{
    "id": 81142,
    "name": "test_81142",
    "customer": 81,
    "contact_person": {
        "name": "test48",
        "phone": 127,
        "mail": "test@mail.com",
        "customer": 81
    }
}
如果存在联系人,则响应:

{
    "contact_person": {
        "name": [
            "contact person with this name already exists."
        ]
    }
}