【发布时间】:2015-12-16 01:43:34
【问题描述】:
我有一个嵌套的 ModelSerializer,但无法验证。
我遇到的问题是,在创建父序列化程序时,我可能需要也可能不需要创建嵌套的序列化程序/模型,因为它可能已经存在于数据库中,我只想链接到它。
代码设置:
models.py
class ModelA(models.Model):
modelb = ForeignKey(ModelB, null=true, blank=true)
...
class ModelB(models.Model):
...
serializers.py
class ModelASerializer(serializers.ModelSerializer):
modelb = ModelBSerializer(required=False)
class Meta:
model = ModelA
depth = 1
class ModelBSerializer(serializers.ModelSerializer):
class Meta:
model = ModelB
因此,给定 3 个数据场景,我在所有 3 个数据场景中都遇到了验证错误。
首先,如果我像这样将 NestedModel 作为数据传递
data = {
'nestedmodel': NestedModel(**args),
...
}
我收到验证错误,说有一个 non_field_error,它需要一个字典,但得到了一个 NestedModel 实例。
其次,如果我传递的是 NestedModel 的数据(而不是对象):
data = {
'nestedmodel': {'id': 'this', ... },
}
由于嵌套模型具有唯一键 ('id') 并且已存在于数据库中,因此我得到了等效于重复键的验证错误。
第三,如果我只是将嵌套模型的 id 传递给它,我会收到与第一种情况类似的错误,只是它说它得到的是 Unicode 而不是 NestedModel 实例。
data = {
'nestedmodel': 'this',
}
我理解为什么所有这三种情况都会发生并且验证失败,但这无助于我尝试链接已经存在的 NestedModel 的目标。
我该怎么做呢?我做错了什么?
【问题讨论】:
标签: python django django-rest-framework django-1.8