我是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:名称'RunNew2N3'未定义
答案 0 :(得分:1)
这似乎是一个缩进问题,如果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"})
答案 1 :(得分:0)
这是基本的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)
...