在urls.py
文件中定义路由
from django.urls import path, include
from rest_framework import routers
from projects import views
from projects.views1 import ProjectsList, ProjectDetail
from . import views1
# ## 指定当前应用的命名空间
app_name = 'projects'
#1.创建路由对象
router = routers.SimpleRouter()
#2.注册路由
#第一个参数prefix为路由前缀,一般为应用名称
#第二个参数为视图集,不要加.as_view()
router.register(r'projects',views.ProjectsViewSet)
urlpatterns = [
#将自动生成的路由添加到urlpatterns中
path('',include(router.urls))
]
urlpatterns += router.urls
修改views.py
文件:
## 注意先继承mixins的方法
class ProjectsViewSet(viewsets.ModelViewSet):
queryset = Projects.objects.all()
serializer_class = ProjectsModelSerializer
filter_backends = [DjangoFilterBackend]
ordering_fields = ['name','id']
filterset_fields = ['name','tester']
#1.可以使用action装饰器来声明自定义动作
#默认情况下,实例方法名称就是动作名称
#methods参数用于指定该动作支持的请求方法,默认为get
#detail参数用于指定该动作用处理的是否为详情对象,(url是否需要传递pk值)
@action(methods=['get'],detail=False,url_path='nm',url_name='url_name')
def names(self,request,*args,**kwargs):
querset = self.get_queryset()
serializer = ProjectNameSerializer(instance=querset,many=True)
return Response(serializer.data)
@action(detail=False)
def interfaces(self, request,*args,**kwargs):
instance = self.get_object()
serializer = InterfacesByProjectIdSerializer(instance = instance)
return Response(serializer.data)