【发布时间】:2019-07-12 02:56:50
【问题描述】:
我的成员应用程序希望 JSON 响应包含模型 ID 的主键结果。我不想使用整数 ID,而是使用 slug。我知道在标准的 django 框架中你可以这样做:
from rest_framework import serializers
from .models import Page
class PageSerializer(serializers.ModelSerializer):
id = serializers.CharField(source='slug')
class Meta:
model = Page
fields = ('name','id',...etc )
但是,这在使用 json API 时不起作用 - 在我的回复中,我仍然有类似的东西
"data": [{
"type": "pages",
"id": "2",
"attributes": {
"name": "Some page name",
}]
当我希望“id”字段类似于“some-page-name”(蛞蝓)时
这对于 json API 是不可能的。为清楚起见,上面等效的 json API 导入将是
from rest_framework_json_api import serializers
非常感谢
****添加****
为了帮助澄清我面临的问题,这里是一个使用标准 REST 框架的序列化程序。下面显示的所有属性都包含在 Page 模型中。
from rest_framework import serializers
from .models import Page
class PageSerializer(serializers.ModelSerializer):
id = serializers.CharField(source='slug')
class Meta:
model = Page
fields = ('name','id')
我在 http://localhost:8000/api/pages 得到的 JSON 响应如下
[
{
"name": "Page 1",
"id": "page-1"
},
{
"name": "Page 2",
"id": "page-2"
},
{
etc
}
]
当我使用 json API 时,做的完全一样,但显然是导入
from rest_framework_json_api import serializers
我无法以同样的方式更改 id 值,查看 http://localhost:8000/api/pages 时出现这样的情况
{
"links": {
omitted for brevity ...
},
"data": [
{
"type": "pages",
"id": "1",
"attributes": {
"name": "Page 1"
}
},
{
"type": "pages",
"id": "2",
"attributes": {
"name": "Page 2"
}
},
]
【问题讨论】:
-
不要在
fields中包含'id'。 -
你的模型中是否有现场蛞蝓?
-
如果你的模型有一个
slug字段,为什么不把它作为字段传递(并给它一个标签“id”)? -
嗨 - 感谢您回来。如果我删除字段中的 'id' 则没有区别,抱歉,是的,我的模型中确实有 slug .. 为简洁起见,我没有在字段列表中显示它
-
@dirkgroten 抱歉,你能澄清一下吗?
标签: django django-rest-framework