Estoy tratando de pasar el "ID de usuario" solicitado al Procedimiento almacenado, pero no pude obtener el "ID de usuario" solicitado en el método GET. SP funciona bien cuando ingresé la identificación de usuario directamente
vistas.py:
@api_view(['GET', 'POST']) def ClaimReferenceView(request, userid): try: userID = Tblclaimreference.objects.filter(userid=userid) except Tblclaimreference.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': user = Tblclaimreference.objects.get(userid=self.request.user.id) print(user) cursor = connection.cursor() cursor.execute('EXEC [dbo].[sp_GetClaims] @UserId= %s',(user,)) result_set = cursor.fetchall() print(type(result_set)) response_data = [] for row in result_set: response_data.append( { "Number": row[0], "Opened": row[1], "Contacttype": row[2], "Category1": row[3], "State": row[4], "Assignmentgroup": row[5], "Country_Location": row[6], "Openedfor": row[7], "Employeenumber": row[8], "Shortdescription": row[9], "AllocatedDate": row[10] } ) return Response(response_data, status=status.HTTP_200_OK) elif request.method == 'POST': serializer = ClaimReferenceSerializer(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)
modelos.py:
class Tblclaimreference(models.Model): taskid = models.IntegerField(db_column='TaskId', primary_key=True) userid = models.IntegerField(db_column='UserID') internaldescription = models.CharField(db_column='Internaldescription', max_length=500, blank=True, null=True) additionalcomments = models.CharField(db_column='Additionalcomments', max_length=500, blank=True, null=True)
Pasas una Tblclaimreference
, no una identificación de usuario. Puedes usar:
cursor.execute('EXEC [dbo].[sp_GetClaims] @UserId= %s',( userid ,))
Si desea utilizar el .pk
del usuario que inició sesión, es:
cursor.execute('EXEC [dbo].[sp_GetClaims] @UserId= %s',( request.user.pk ,))