0

zur Zeit i den Parameter 'id' in der URL übergeben und wir rufen Sie die API von id jedoch würde Ich mag API durch die parameter.here nennen, ist views.py`Django RestFramework die API-Aufruf durch das Feld

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)

das ist das Ergebnis, wenn ich die ID in der enter image description here `

url passieren, wenn ich die ID in der uRL übergeben jedoch die es nur zeigen, dass bestimmte ID Ergebnis i Ansicht müssen, wenn ich übergeben das andere Feld inste Anzeige der ID es ist das Ergebnis basierend auf that.so meine Frage ist, was ich muss in den Ansichten.surve.py und Urls.py ändern. dies ist 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)

Das ist mein 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

Es hängt davon ab, was Sie anstelle von ID übergeben möchten. Welcher Typ ist es? ist es eine Schnur? oder ein "Uuid"? –

+0

Ich möchte den "PName" übergeben, der String ist. – Nishit

+0

Höchstwahrscheinlich möchten Sie Abfrageparameter, so dass Sie nach anderen Feldern filtern können. –

Antwort

0

sollten Sie Ihre ändern url, so dass es akzeptiert string:

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

und dann get_object Methode wie folgt ändern:

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

Aber Sie werden Probleme, wenn pname nicht eindeutig ist, denn es wird sich beschweren, dass Sie mehr als ein solche Post.

Hoffe es hilft!

Verwandte Themen