Django rest-framework:如何让客户端知道pk,以便它可以获取,更新或删除

时间:2015-11-06 08:10:35

标签: django django-rest-framework

django休息框架

我有两个api

url(r'^testall/$',views.DataList.as_view()),
url(r'^testone/(?P<pk>[0-9]+)/$',views.DataDetail.as_view()),

我有一个问题,r'^testone/(?P<pk>[0-9]+)/$网址可​​以getupdatedelete

但是用户必须知道pk
我怎样才能让客户知道pk是什么?

views.py

class DataList(generics.ListCreateAPIView):
    queryset = Data.objects.all()
    serializer_class = DataSerializer
class DataDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Data.objects.all()
    serializer_class = DataSerializer

这是我的models

class Data(models.Model):

    mac_address = models.CharField(max_length=50, null=False, blank=False)
    datetime = models.DateTimeField(auto_now=False, auto_now_add=False)
    ...

我有一个字段mac_address,这是唯一的,客户知道这个 我想也许我可以编辑代码

 url(r'^testone/(?P<mac_address>\w+)/$',views.DataDetail.as_view())

但我收到了错误:

Expected view DataDetail to be called with a URL keyword argument named "pk". Fix your URL conf, or set the `.lookup_field` attribute on the view correctly.   

我不确定在网址mac_address中使用:http://localhost:8000/test/A1:BC:34:WD:TT/是个好主意 请指导我 非常感谢你

1 个答案:

答案 0 :(得分:1)

这里pk是lookup_field, 当你拨打这个网址时,{'id': 4, 'mac_address': 3423, ..} 你会得到像

这样的回复
url(r'^testone/(?P<pk>[0-9]+)/$',views.DataDetail.as_view()),

,这里“id”是“pk”这个id可用于调用

url(r'^testone/(?P<mac_address>\w+)/$',views.DataDetail.as_view())

class DataDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Data.objects.all()
    serializer_class = DataSerializer
    lookup_field = 'mac_address'

和 在视图中,您可以将mac_address用作lookup_field,

{{1}}

您可以推荐更多http://www.django-rest-framework.org/api-guide/generic-views/#genericapiview