我正在尝试用Django rest_framework来序列化外键。按照正常的DB规范化设置,外键是用来连接查找表的。
我的模型与查找表的一个例子。
class OrderStatus(models.Model):
StatusId = models.PositiveSmallIntegerField(primary_key=True)
StatusDescription = models.CharField(max_length=50)
class Order(models.Model):
OrderId = models.AutoField(primary_key=True)
OrderDate = models.DateTimeField(auto_now_add=True)
Status = models.ForeignKey(OrderStatus, on_delete=models.CASCADE)
我的序列化器。
class OrderStatusSerializer(serializers.ModelSerializer):
class Meta:
model = OrderStatus
fields = ['StatusId', 'StatusDescription']
class OrderSerializer(serializers.ModelSerializer):
class Meta:
model = Order
fields = ('OrderId', 'OrderDate', 'Status')
当我调用REST API时,我得到的结果如下:
{
"type": "Order",
"id": "1",
"attributes": {
"OrderId": 1,
"OrderDate": "2020-05-19T08:23:54"
},
"relationships": {
"Status": {
"data": {
"type": "OrderStatus",
"id": "1"
}
}
}
}
我希望在 "属性 "中内联状态,可以是一个简单的id,也可以是一个内联两个值的JSON对象。这两个都是不错的选择,只要它不在那个 "关系 "字段中。
我试着在OrderSerializer中添加了以下内容。
Status = serializers.PrimaryKeyRelatedField(queryset=OrderStatus.objects.all())
没有区别
我试着添加以下内容。
Status = OrderStatusSerializer(many=False)
没有区别
我尝试了所有其他选项https:/github.comencodedjango-rest-frameworkblobmasterdocsapi-guiderelations.md。包括将SlugField包含描述而不是ID,但没有结果。
似乎我所做的改变对序列化没有影响。
根据我自己的评论,这个问题是由以下原因造成的。rest_framework_json_api.renderers.JSONRenderer
.
通过将其切换回 rest_framework.renderers.JSONRenderer
重新建立了预期的记录行为。