2017-10-06 3 views
0

J'ai ce point de vue basé sur la classe:Appeler une vue basée sur la classe d'une application d'une autre application même projet

class Browse(APIView): 
''' 
Browse associations 

''' 
permission_classes = [TokenHasReadWriteScope] 

def get(self,request,format=None): 
    reply={} 
    status=200 


    try: 
     filter_options={} 
     name=request.query_params.get('name','').strip() 
     if name: 
      filter_options['name__icontains']=name 


     associations=Association.objects.filter(**filter_options)values('id','name') 
     page=request.query_params.get('page',1) 
     paginator=Paginator(associations,20) 
     data=paginator.page(page) 
    except PageNotAnInteger: 
     data=paginator.page(1) 
    except EmptyPage: 
     data=paginator.page(paginator.num_pages) 

    except: 
     status=400 
     reply['detail']=(_('ErrorProcessingRequest')) 

    if status==200: 
     reply['associations']=list(data) 
     reply['total_num_of_pages']=paginator.num_pages 
     reply['total_rows_found']=paginator.count 

    return JsonResponse(reply,status=status) 

Maintenant, j'ai une autre application qui est orientée vers les utilisateurs internes (différent connexion et tous), mais Je veux lister les associations encore. Le code ci-dessus est court et cela ne me dérange pas de le coller là mais je me demande simplement si je peux éviter DRY en appelant le Browse from views.py d'une autre application.

Actuellement, je TRIE de cette application 2:

 from app1.views import Browse 
     b=Browse() 
     #but I cant serialize it as it returns <app1.views.Browse object at 0x0000000006CE0E80> is not JSON serializable 

Répondre

1

a résolu le problème suivant cette SO Answer. Tout ce que j'avais à faire était:

view = Browse.as_view() 
return view(request)