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]+)/$
网址可以get
,update
和delete
但是用户必须知道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/
是个好主意
请指导我
非常感谢你
答案 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