Django rest framework 使用Django REST框架从主键反序列化相关对象

Django rest framework 使用Django REST框架从主键反序列化相关对象,django-rest-framework,Django Rest Framework,Django REST框架的新手。连载进展顺利。我不清楚的是如何在数据库中只给出主键的情况下反序列化相关对象。我的意思是: class ThingA(models.model): name=models.CharField(最大长度=25) role=models.CharField(最大长度=25,null=True,blank=True) 类别ThingB(models.model): name=models.CharField(最大长度=25) athing=型号。外键(ThingA)

Django REST框架的新手。连载进展顺利。我不清楚的是如何在数据库中只给出主键的情况下反序列化相关对象。我的意思是:

class ThingA(models.model):
name=models.CharField(最大长度=25)
role=models.CharField(最大长度=25,null=True,blank=True)
类别ThingB(models.model):
name=models.CharField(最大长度=25)
athing=型号。外键(ThingA)
假设我有一个
POST/thingb
REST调用来创建一个新的
thingb
,有效负载包含新的
thingb
的名称,以及它的相关
ThingA
id
(数据库中已经存在):

{
“名称”:“新事物的名称B”,
“阿辛”:5
}
我如何编写一个DRF序列化程序,它也可以反序列化这个有效负载,最终得到一个
ThingB
,它的
athing
属性是id=5的
ThingA
对象?我一直在尝试使用DRF ModelSerializer,所以我已经做到了这一点:

class ThingSerializer(serializers.ModelSerializer):
类元:
型号=厚度
字段=('id','name','role')
类ThingBSerializer(serializers.ModelSerializer):
a_thingie=thingSerializer(source='athing')
类元:
型号=ThingB
字段=('id','name','a_thingie')
文档中的反序列化示例使用了一个简单的对象,该对象的属性是简单类型,JSON负载包含了它所需要的一切。当结果对象包含另一个对象的外键时,反序列化的最佳实践是什么?我知道我不能这样做:

#这行不通
b=ThingBSerializer(数据=请求.数据)
我原以为通过重写序列化程序类中的
restore\u对象
方法可以取得一些进展,但我发现从未调用过
restore\u对象
。有人能给我指一下这个操作或提供一个例子吗?谢谢

检查它应该完全满足您的需要-至少在设置提交的有效负载的关系方面

如果您想返回
a_thingie
的完整表示形式,可以将PrimaryKeyRelatedField子类化,并将
重写为\u native
,而不只是返回密钥

我希望这能有所帮助。

谢谢——这就是答案。DRF做了我想做的事情,现在我更好地理解了它。