django rest framework 3.1 在 ModelSerializer 中处理 create/update 我在哪里验证嵌套数据?

django rest framework 3.1 Handle create/update in ModelSerializer where do i validate the nested data?

我尝试使用嵌套表示来创建和更新资源。

我在这里看了 -> http://www.django-rest-framework.org/api-guide/serializers/#writable-nested-representations。但是我不知道在哪里进行验证来验证我的嵌套资源是否存在,它不是由它的 id 定义的。

json

{
    "name": "this is my name"
    "network": {
        "code": "existing_code",
        "operator": "existing_op"
    },
 }

我的序列化器的创建方法

def create(self, validated_data):

    network = validated_data.pop("network")

    #this could throw a DoesNotExist exception !!!!
    validated_data["network"] = Network.objects.get(operator=network["operator"], code=network["code"])

    instance = manny.common.models.DeliveryPoint.objects.create(**validated_data)
    return instance

是否可以直接在 ModelSerializer 上的验证器中进行检查:

我的序列化器的验证方法

def validate(self, data):
    #some code here....

    if not Network.objects.filter(operator=data["operator"], code=data["code"]).exists():
        raise serializers.ValidationError("network doesn't exist")
    return data

或者我是否必须重写 ModelViewSet 的创建方法?

感谢您的帮助!

为什么不使用 get_object_or_404 (https://docs.djangoproject.com/fr/1.8/topics/http/shortcuts/#get-object-or-404) 而不是 Network.objects.get

如果网络对象不存在,抛出的异常会产生 404 错误,您不需要手动处理。