【问题标题】:django different serializer for GET and PUT - SyntaxError: invalid syntaxdjango 用于 GET 和 PUT 的不同序列化程序 - SyntaxError:无效语法
【发布时间】:2014-09-20 02:24:36
【问题描述】:

我正在尝试使用 get_serializer_class() 并且收到错误消息。这是我的看法 -

class CalendarDetail(RetrieveUpdateDestroyAPIView):

    def get_serializer_class(self):
        if self.request.method == 'GET':
            serializer_class = CalendarGETSerializer
        elif self.request.method == 'PUT':
            serializer_class = CalendarPUTSerializer
        return serializer_class

    def get(self, request, format=None):
        evntname = self.request.GET.get('name')
        queryset = Evntmst.objects.filter(evntmst_name=evntname)
        serializer = get_serializer_class(queryset)
        if queryset:
            return Response(serializer.data)
        else:
            raise Http404

    def put(self, request, format=None):
        serializer = get_serializer_class(data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST

这是我的 urls.py -

url(r'^deploy/calendartest/$', CalendarDetail.as_view(), name='CalendarDetail'),

当我尝试点击 URL 时,我会收到以下错误消息 -

    class CalendarDetail(RetrieveUpdateDestroyAPIView):
        ^
SyntaxError: invalid syntax
[14/Sep/2014 20:08:16] "GET /deploy/calendartest/?name=cal_daily HTTP/1.1" 500 5
9

我猜这是我正确调用的类内部的东西,语法错误不一定是真的? 我没有得到的是,我已经设计了这个类,就像我设计所有其他工作的类一样,我有一个单独的视图,使用一个序列化程序进行简单的获取,该序列化程序将该 URL 作为 200 而不是 500 返回。

【问题讨论】:

  • 有时,当您遇到语法错误时,问题就在它上面的那一行。类定义的正上方是否有任何看起来损坏的东西?
  • 不,我在课程行之前有一个注释行## TEST CLASS VIEW
  • 对不起,我的意思是第一行代码不是注释/空行/解释器将忽略的内容。
  • 哇哦!你是对的,我又去了另一行,我无意中删除了前一行代码的右括号。我们很好!

标签: python django django-rest-framework


【解决方案1】:

这有一些问题。一个是在上一个视图中,我无意中删除了在我发布的视图的上一行中添加的结束符。

其次,get_serializer_class 需要 ()(queryset) 才能正确调用实例。

我正在尝试使用 get_serializer_class() 并且收到错误消息。这是我的看法-

类 CalendarDetail(RetrieveUpdateDestroyAPIView):

def get_serializer_class(self):
    if self.request.method == 'GET':
        serializer_class = CalendarGETSerializer
    elif self.request.method == 'PUT':
        serializer_class = CalendarPUTSerializer
    return serializer_class

def get(self, request, format=None):
    evntname = self.request.GET.get('name')
    queryset = Evntmst.objects.filter(evntmst_name=evntname)
    serializer = get_serializer_class()(queryset)
    if queryset:
        return Response(serializer.data)
    else:
        raise Http404

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 2015-11-10
    • 2017-12-29
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 2022-12-11
    相关资源
    最近更新 更多