Django Rest Framework HyperLinkedRelatedField:允许 id 而不是 url 用于 POSTS 请求

jsh*_*crm 6 python django django-rest-framework

我想允许 HyperLinkRelatedField 只接受一个 id 而不是需要一个超链接来创建一个对象的新实例,但是对于获取请求,我想返回的超链接不仅仅是一个 id 但它似乎是一个或其他。这可能吗?

class Blog(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Blog
        fields = ('url', 'id')

class Comment(serializers.HyperlinkedModelSerializer):
    blog = serializers.HyperlinkedRelatedField(view_name='blog-detail', queryset=Blog.objects.all())
    class Meta:
        model = Comment
        fields = ('url', 'text', 'blog')
Run Code Online (Sandbox Code Playgroud)


GET请求评论返回(这是完美的):

{'url': 'mysite.fake/comments/1', 'text': 'test text', 'blog': 'mysite.fake/blog/1'}
Run Code Online (Sandbox Code Playgroud)


POST请求需要:

{'text': 'test text', 'blog': 'mysite.fake/blog/1'}
Run Code Online (Sandbox Code Playgroud)

我也希望能够通过:

{'text': 'test text', 'blog': '1'}
Run Code Online (Sandbox Code Playgroud)

Lin*_*via 4

这是可能的,但不是开箱即用的。

您应该使用ModelSerializer并定义您自己的关系字段。以 a 开头PrimaryKeyRelatedField并覆盖 the ,to_representation因此它返回url 而不是 id