0

でAPIを呼び出して、現在私は、URLにパラメータ「ID」を渡すと私はidでAPIを呼び出すジャンゴRestFrameworkはフィールド

views.py`です

class post_list(APIView): 
 

 
    def get(self,request,format=None): 
 
     post_resource=PostResource() 
 
     dataset=Dataset() 
 
     post = Post.objects.all() 
 
     serializer = PostSerializer(post, many=True) 
 
     a=[] 
 
     for row in post: 
 
      a.append(row) 
 

 
     return Response(serializer.data) 
 

 
    def post(self,request,format =None): 
 
     serializer = PostSerializer(data=request.data) 
 
     if serializer.is_valid(): 
 
      serializer.save() 
 
      return Response(serializer.data, status=201) 
 
     return Response(serializer.errors, status=400) 
 

 

 

 

 
class post_detail(APIView): 
 
    def get_object(self, pk): 
 
     try: 
 
      return Post.objects.get(pk=pk) 
 
     except Post.DoesNotExist: 
 
      raise Http404 
 

 
    def get(self, request, pk, format=None): 
 
     post = self.get_object(pk) 
 
     serializer = PostSerializer(post) 
 
     return Response(serializer.data) 
 

 
    def put(self, request, pk, format=None): 
 
     snippet = self.get_object(pk) 
 
     serializer = PostSerializer(snippet, data=request.data) 
 
     if serializer.is_valid(): 
 
      serializer.save() 
 
      return Response(serializer.data) 
 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
 

 
    def delete(self, request, pk, format=None): 
 
     post = self.get_object(pk) 
 
     post.delete() 
 
     return Response(status=status.HTTP_204_NO_CONTENT)

私は、URLにenter image description here `

をIDを渡すときに私はそれだけで、その特定のid結果を示すのURLにIDを渡すとき、これは私が合格した場合しかし、私はビューを必要とする結果であり、他のフィールドinste idの広告はthat.soに基づいて結果を表示しています。私の質問はviews.pyとUrls.pyで変更する必要があります。これは、これはあなたがあなたを変更する必要があり

from rest_framework import serializers 
 
from .models import Post 
 

 

 
class PostSerializer(serializers.ModelSerializer): 
 
    class Meta: 
 
     model = Post 
 

 
     #fields=('ProductName','Score') 
 
     fields ='__all__'

`

+0

'id'の代わりに何を渡したいかによって決まります。どのようなタイプですか?それは文字列ですか?または 'uuid'? –

+0

文字列である "PName"を渡したいと思います。 – Nishit

+0

ほとんどの場合、クエリパラメータが必要なので、他のフィールドでフィルタリングできます。 –

答えて

0

file`私serializer.pyあるurls.py file`

from django.conf.urls import url 
 
from api import views 
 
from rest_framework.urlpatterns import format_suffix_patterns 
 

 
urlpatterns = [ 
 
    url(r'^post/$', views.post_list.as_view()), 
 
    url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail.as_view()), 
 

 
] 
 
urlpatterns=format_suffix_patterns(urlpatterns)

ですURLは、文字列受け入れるように:それはあなたが1以上のものを持っていると文句を言うだろうのでpnameは、一意でない場合の問題を

def get_object(self, pname): 
    try: 
     return Post.objects.get(pname=pname) 
    except Post.DoesNotExist: 
     raise Http404 

しかし、あなたは以下となります。

url(r'^post/(?P<pname>[a-zA-Z0-9]+)/$', views.post_detail.as_view()) 

をしてから、このようなあなたのget_object方法を変更しますそのようなポスト。

希望すると助かります!