【问题标题】:Django RestFramework call the Api by the FieldDjango Rest Framework 按字段调用 Api
【发布时间】:2017-10-11 12:43:33
【问题描述】:

目前我在url中传递参数'id'并通过id调用API但是我想通过参数调用API。这里是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` 中传递 id 时的结果

当我在 url 中传递 id 时,它只显示那个特定的 id 结果,但是如果我传递另一个字段而不是 id,我需要查看它会显示基于 that.so 的结果。所以我的问题是我应该做什么views.py 和 Urls.py 中的更改。这是 urls.py 文件`

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 文件`

from rest_framework import serializers
from .models import Post


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

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

`

【问题讨论】:

  • 这取决于你想传递什么而不是id。它是什么类型的?它是一个字符串吗?或uuid?
  • 我想传递字符串形式的“PName”。
  • 您很可能需要查询参数,以便您可以按其他字段进行过滤。

标签: python-3.x django-models django-rest-framework django-views django-urls


【解决方案1】:

您应该更改您的 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 不是唯一的,你会遇到问题,因为它会抱怨你有多个这样的帖子。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 2017-07-13
    • 2013-01-15
    • 1970-01-01
    • 2022-01-09
    • 2021-07-17
    • 2017-08-29
    • 2015-09-19
    • 1970-01-01
    相关资源
    最近更新 更多