2017-02-12 8 views
0

モバイルクライアント用の私のdjangoプロジェクトの残りのAPIを作成します。Django RESTフレームワーク。ユニークなURLでオブジェクトを取得

models.py

class Category(models.Model): 
    title = models.CharField(max_length=200, verbose_name="Title") 
    url = models.CharField(max_length=200, verbose_name="Url") 

API/serializers.py

class CategoryDetailSerializer(ModelSerializer): 

    class Meta: 
     model = Category 
     fields = [ 
      'id', 
      'title', 
      'url' 
     ]  

API/views.py

私はカテゴリーオブジェクトに対して、このモデルとAPIの構造を持っています

class CategoryViewSet(viewsets.ModelViewSet): 
    queryset = Category.objects.all() 
    serializer_class = CategoryDetailSerializer 

およびAPI/urls.py

urlpatterns = [ 
    url(r'^(?P<pk>\d+)/$', CategoryViewSet.as_view({'get': 'retrieve'}), name='detail'), 
] 

私はmy_server_url/api/categories/[pk]/

質問にGETリクエストを使用しカテゴリーオブジェクトを取得するには、それが(一意である)urlフィールドだと、オブジェクトを取得する方法です。例えば my_server_url/api/categories/category_1/ rest-frameworkでも可能ですか?

[pk]:[url]オブジェクトのマップを最初に取得してから、そこからURLでpkを取得し、既存のリクエストメソッドに渡す必要があります。

答えて

0

ビュー内でlookup_fieldを設定できます。

class CategoryViewSet(viewsets.ModelViewSet): 
    queryset = Category.objects.all() 
    serializer_class = CategoryDetailSerializer 
    lookup_field = 'url' 

またへのURLの正規表現を変更する必要があります:私はあなたはそれが有効なURLであることを保証slugフィールドhttps://docs.djangoproject.com/en/1.10/ref/models/fields/#slugfieldとして一意のフィールドを格納推薦しかし

urlpatterns = [ 
    url(r'^(?P<url>[-\w]+)/$', CategoryViewSet.as_view({'get': 'retrieve'}), name='detail'), 
] 

+0

ありがとうございます!できます。 –

関連する問題