【问题标题】:Django REST Custom View Parameters in Viewset with CoreAPI使用 CoreAPI 在 Viewset 中的 Django REST 自定义视图参数
【发布时间】:2016-10-14 01:46:19
【问题描述】:

如果我将 django-rest-framework 视图框架定义为:

class ProblemViewSet(viewsets.ModelViewSet):
    queryset = Problem.objects.all()
    serializer_class = ProblemSerializer

    @detail_route(methods=['post'], permission_classes=(permissions.IsAuthenticated,))
    def submit(self, request, *args, **kwargs):
        # my code here
        return Response(...)

当我查看定义的 CoreAPI 架构时,我发现:

problems: {
    create(title, text, value, category, hint)
    destroy(pk)
    list([page])
    partial_update(pk, [title], [text], [value], [category], [hint])
    retrieve(pk)
    submit(pk)
    update(pk, title, text, value, category, hint)
}

我希望submit API 端点采用一个额外的参数,称为answer,但到目前为止我还没有弄清楚如何添加这样一个自定义参数。我知道我可以只传入 POST 数组,但这似乎不优雅且不 RESTful。有什么想法吗?

【问题讨论】:

    标签: python django rest django-rest-framework


    【解决方案1】:

    我不明白你的问题,但我认为你想在输入中添加 answer 到 django-rest 表单或原始文件,你可以在序列化程序中添加 ProblemSerializer 下一个:

    from rest_framework import serializers
    ...
    class CustomerSerializer(serializers.ModelSerializer):
        answer = serializers.SerializerMethodField()
        class Meta:
            model = Problem
            fields = ['answer', 'my-normal-params',...]
    
    def get_answer(self, problem):
        if hasattr(problem, 'answer'):
            request = self.context['request']
            return answer
    

    在 get_answer 方法中,您将在 json 中显示您想要的值,或者您可以根据需要返回 None (null),

    如果这不是你的问题,请说我,我会帮你的。

    【讨论】:

    • 如果我只想在使用 ProblemSerializer 的视图之一中使用“答案”字段会怎样?当我这样做时,它会向该视图集中的每个 API 端点添加“答案”。我必须创建另一个序列化程序吗?
    • 嗯...在那种情况下,我认为这个链接可以帮助你django-rest-framework.org/api-guide/generic-views/…我还没有测试这个,我不知道这是否可行,你可以覆盖属性´serializer_class ´ 在 get_queryset 方法内,添加您的自定义序列化程序取决于 url,或者您也可以在 detatil_view 内添加类似这样的内容:self.serializer_class = ProblemSubmitSerializer
    • 好的,好主意,您可以将 serializer_class 参数传递给 @detail_route。谢谢!
    猜你喜欢
    • 2018-09-04
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2020-06-07
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多