Django REST 框架的新手。序列化进展顺利。我不清楚的是如何反序列化仅给定数据库中的主键的相关对象。这就是我的意思:
class ThingA(models.model):
name = models.CharField(max_length=25)
role = models.CharField(max_length=25, null=True, blank=True)
class ThingB(models.model):
name = models.CharField(max_length=25)
athing = models.ForeignKey(ThingA)
假设我有一个POST /thingb
REST 调用来创建一个新的ThingB
,并且有效负载包含新的名称ThingB
及其id
相关的名称ThingA
(数据库中已经存在):
{
"name": "Name for new ThingB",
"athing" : 5
}
我如何编写一个 DRF 序列化器,它也可以反序列化这个有效负载,最终得到一个ThingB
其athing
属性是ThingA
id=5 的对象?我一直在尝试使用 DRF ModelSerializers,所以我已经做到了这一点:
class ThingASerializer(serializers.ModelSerializer):
class Meta:
model = ThingA
fields = ('id', 'name', 'role')
class ThingBSerializer(serializers.ModelSerializer):
a_thingie = ThingASerializer(source='athing')
class Meta:
model = ThingB
fields = ('id', 'name', 'a_thingie')
文档中所有反序列化的示例都使用属性为简单类型的对象的简单案例,并且 JSON 有效负载包含它需要的所有内容。当结果对象包含另一个对象的外键时,反序列化的最佳实践是什么?我知道我不能这样做:
# THIS WON'T WORK
b = ThingBSerializer(data=request.DATA)
我认为通过覆盖restore_object
序列化程序类中的方法可以取得一些进展,但我发现它restore_object
永远不会被调用。谁能指出我或提供此操作的示例?谢谢!