从另一个函数NameError调用函数:未定义名称“MethodName”

2024-04-25 17:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手。如何从另一个函数调用函数。举个例子:

class TSMTViewSet(viewsets.ModelViewSet):
    queryset = Tsmt.objects.all()
    serializer_class = TsmtSerializer

def RunNew2N3(fromempid,toempid,fromdate,todate,fromcscid='',tocscid=''):
    cursor = connection.cursor()
    try:
        cursor.callproc('[dbo].[SPRUN]',[fromempid,toempid,fromdate,todate,fromcscid,tocscid])        
    finally:
        cursor.close()

def create(self,request):
    tsmt  = request.data.get('tsmt')

    tsmt['createby']="Admin"             
    tsmt['createdate']=datetime.datetime.now()    

    fromempid = tsmt['empid']
    toempid = tsmt['empid']
    fromdate = tsmt['tdate']
    todate = tsmt['tdate']




    serializer = TsmtSerializer(data=tsmt)

    if serializer.is_valid():
        tsmt_saved = serializer.save()

        RunNew2N3(fromempid,toempid,fromdate,todate)

        return Response({"result":"TSMT '{}' created successfully".format(tsmt_saved.tdate),"status":"success"})
    else:
        return Response({"result":"'{}'".format(serializer.errors),"status":"fail"})

我把call函数放在上面,为什么我不能调用它。我收到了错误信息

NameError: name 'RunNew2N3' is not defined


Tags: 函数defcursorclassserializertdatefromdatetodate
2条回答

这是基本的Python。如果函数是类实例上的方法,则需要:

  • 在类内缩进
  • 接受self作为第一个参数
  • 通过self调用。你知道吗

所以:

class TSMTViewSet(viewsets.ModelViewSet):
    ...

    def RunNew2N3(self, fromempid, toempid, fromdate, todate, fromcscid='', tocscid=''):
        ...

    def create(self, request):
        ...
        self.RunNew2N3(fromempid, toempid, fromdate, todate)
        ...

这看起来像是缩进问题,如果RunNew2N3不是TSMTViewSet的一部分,则在类外部定义它,并在类内部对齐create

def RunNew2N3(fromempid,toempid,fromdate,todate,fromcscid='',tocscid=''):
    cursor = connection.cursor()
    try:
        cursor.callproc('[dbo].[SPRUN]',[fromempid,toempid,fromdate,todate,fromcscid,tocscid])        
    finally:
        cursor.close()

class TSMTViewSet(viewsets.ModelViewSet):
    queryset = Tsmt.objects.all()
    serializer_class = TsmtSerializer

    def create(self,request):
        tsmt  = request.data.get('tsmt')

        tsmt['createby']="Admin"             
        tsmt['createdate']=datetime.datetime.now()    

        fromempid = tsmt['empid']
        toempid = tsmt['empid']
        fromdate = tsmt['tdate']
        todate = tsmt['tdate']

        serializer = TsmtSerializer(data=tsmt)

        if serializer.is_valid():
            tsmt_saved = serializer.save()

            RunNew2N3(fromempid,toempid,fromdate,todate)

            return Response({"result":"TSMT '{}' created successfully".format(tsmt_saved.tdate),"status":"success"})
        else:
            return Response({"result":"'{}'".format(serializer.errors),"status":"fail"})

相关问题 更多 >