【发布时间】:2017-08-14 12:07:02
【问题描述】:
我有这两个相关的模型:
class EndPoint(TimeStampedModel):
name = models.CharField(max_length=100)
url = models.CharField(max_length=100)
description = models.CharField(max_length=100)
class Parameter(TimeStampedModel):
name = models.CharField(max_length=100)
label = models.CharField(max_length=100)
required = models.BooleanField()
type = models.CharField(max_length=100)
format = models.CharField(max_length=100, null = True)
endpoint = models.ForeignKey(EndPoint, related_name="parameters",null = True, on_delete=models.CASCADE)
映射到这些序列化程序:
class ParameterRelationSerializer(serializers.ModelSerializer):
class Meta:
model = Parameter
fields = ('id', 'name', 'label', 'required','type','format')
class EndPointSerializer(serializers.ModelSerializer):
parameters = ParameterRelationSerializer(many = True, read_only=False)
class Meta:
model = EndPoint
fields = ('id', 'name', 'url', 'description', 'parameters')
def create(self, validated_data):
parameters = validated_data.pop('parameters')
endPoint = EndPoint.objects.create(**validated_data)
for parameter_relation in parameters:
Parameter.objects.create(endpoint=endPoint, **parameter_relation)
return endPoint
现在,当我尝试使用此数据发布一个新端点时:
{
"url":"http://the.url.com",
"name":"Dummy url",
"description":"This is a dummy url",
"parameters":[
{
"name":"dummyparam",
"type":"dummy",
"label":"dummy_parameter"
}
]
}
我收到一个 500 错误:
/catalogs/endpoints/ 处的 IntegrityError
“必需”列中的空值违反非空约束
详细信息:失败行包含 (6, 2017-08-14 12:01:52.857902+00, 2017-08-14 12:01:52.857984+00, dummyparam, dummy_parameter, null, dummy, null, 6)。
基本上,它抱怨缺少非空“必需”属性(在参数模型中),从而导致数据库错误。
我的问题是,这不应该由序列化程序验证器处理而不是引发 DB 异常吗?事实上,我还有另外一堆非空属性,当 json 数据丢失时会触发验证错误。
【问题讨论】:
标签: django rest serialization django-rest-framework