我正在尝试序列化与 Django rest_framework内联的外键。外键用于根据正常的数据库规范化设置链接查找表。
我的模型与查找的示例:
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 对象。两者都是不错的选择,只要它不在"关系"字段中。
我尝试将以下内容添加到订单序列化程序:
Status = serializers.PrimaryKeyRelatedField(queryset=OrderStatus.objects.all())
没有区别。
我尝试了以下方法:
Status = OrderStatusSerializer(many=False)
没有区别。
我尝试了所有其他选项 https://github.com/encode/django-rest-framework/blob/master/docs/api-guide/relations.md 包括 SlugField 以包含描述而不是 ID,没有结果。
似乎我更改的内容对序列化没有影响。
根据我自己的评论,该问题是由rest_framework_json_api.renderers.JSONRenderer
引起的。
通过将其切换回rest_framework.renderers.JSONRenderer
可以重新建立预期的记录行为。