0

目前我传递参数“ID”在URL中调用API和我打电话的ID的API,但是我想通过parameter.here调用API是views.py`Django的RestFramework由现场

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)

这是结果,当我通过ID在URL enter image description here`

当我通过ID在它的只显示该特定ID结果网址不过,我需要视图如果我通过其他领域inste广告的id它显示的结果基于that.so我的问题是我应该改变views.py和Urls.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)

这是我serializer.py file`

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

你应该改变你URL,以便它接受字符串:

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

,然后改变你的get_object方法是这样的:

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

但你会的问题,如果pname不是唯一的,因为它会抱怨你有一个以上的这样的邮政。

希望它有帮助!

相关问题