2016-10-03 8 views
1

私はDjangoDjango rest frameworkで新しく、データベースからデータを取得するためにいくつかのルートを作成しようとしています。Django restフレームワークでいくつかのパラメータを渡します

は今の私のurls.pyファイルに私はこの

"cpuProjects": "http://127.0.0.1:8000/cpuProjects/" 

この

router = routers.DefaultRouter() 
router.register(r'cpuProjects', cpuProjectsViewSet, base_name='cpuProjects'), 

このリターンを持っていると私は、この http://127.0.0.1:8000/cpuProjects/ =>すべてのプロジェクトを返し http://127.0.0.1:8000/cpuProjects/ad =>復帰を行う可能性を持っています特定のプロジェクト私view.pyで

私は、この新しいURLを追加私のURLは、このためにその

http://127.0.0.1:8000/cpuProjects/ad/comments http://127.0.0.1:8000/cpuProjects/ad/ussing http://127.0.0.1:8000/cpuProjects/ad/process

のようなものを受け入れたことをしたい今、この

class cpuProjectsViewSet(viewsets.ViewSet): 
    serializer_class = serializers.cpuProjectsSerializer 
    # lookup_field = 'project_name' 
    lookup_url_kwarg = 'project_name' 

    def list(self, request): 
    all_rows = connect_database() 
    serializer = serializers.cpuProjectsSerializer(instance=all_rows, many=True) 
    return Response(serializer.data) 

    def retrieve(self, request, project_name=None): 
    try: 
     opc = {'name_proj' : project_name } 
     all_rows = connect_database(opc) 
    except KeyError: 
     return Response(status=status.HTTP_404_NOT_FOUND) 
    except ValueError: 
     return Response(status=status.HTTP_400_BAD_REQUEST) 
    serializer = serializers.cpuProjectsSerializer(instance=all_rows, many=True) 
    return Response(serializer.data) 

を持って

router.register(r'cpuProjects/([a-zA-Z0-9]+)$', cpuProjectsViewSet, base_name='cpuProjects'), 

しかし、今、私はこの

http://127.0.0.1:8000/cpuProjects/ad/ussing 

をしようとしたとき、私は入手

「ページをなした」私は、このURLは、パラメータを取得する機能を取得するために呼び出す必要があり、そう、なぜこのエラーこと?理解

このURLは、事前に

http://127.0.0.1:8000/cpuProjects/ad 

おかげのように同じプロセスをしません!

答えて

1

これは同様にあなたがlist_route

ために同じことを行うことができます私たちは以前 Q&A

from rest_framework.decorators import detail_route, list_route 
@detail_route(url_path='(?P<slug>[\w-]+)/(?P<what>[\w-]+)') 
def get_by_name(self, request, pk=None,slug=None, what=None): 
    print(slug, what) 

に何をしたかと少し似ています

0

ルータフレームワークはいくつかのパラメータで使用するためのものではありません。(正規表現で)プライマリキーを使用して手動で行うことができます。

関連する問題