3 回答
TA贡献1871条经验 获得超13个赞
路由器无法确定basename。您必须basename在路由器中定义一个。像这样
router.register(r'device-groups', views.DeviceGroupViewSet, base_name='device-groups')
base_name实际上用于为路由/url 生成名称。您可以在此处阅读更多相关信息。
TA贡献1844条经验 获得超8个赞
我不熟悉 DRF,但一般来说,为了根据参数获取对象,您必须:
1) 以这样一种方式定义您的 url,以记住当您想要构建端点时将动态输入的 customer_uuid 因此,在正则表达式的帮助下,您必须构建如下内容:
url(r'^/api/v1/device-groups/(?P<customer_uuid>\d+)/$', views.your_view, name='your_view')
正则表达式 \d+ 将匹配任意大小的整数。该整数将用于从数据库中检索客户。现在观察我将正则表达式写为 (?P\d+),这告诉 Django 将值捕获到名为 customer_uuid 的关键字参数中。
2)定义你的视图函数
from django.shortcuts import render, get_object_or_404
from .models import Customer
def your_view(request, customer_uuid):
customer = get_object_or_404(Customer, pk=customer_uuid)
return render(request, 'customer.html', {'customer': customer})
希望能帮助到你
TA贡献1851条经验 获得超5个赞
如果您在视图中定义不同的 lookup_field,您应该得到您想要的,例如:
class DeviceGroupViewSet(viewsets.ModelViewSet):
serializer_class = DeviceGroupSerializer
queryset = DeviceGroup.objects.all()
lookup_field = 'customer_uuid'
或者,您可能想查看此文档以考虑不同的方法。
添加回答
举报
