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 错误,您不需要手动处理。
我尝试使用嵌套表示来创建和更新资源。
我在这里看了 -> 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 错误,您不需要手动处理。