37.Django_类视图_action⾃定义⽅法有⼀些我们之前⽤的⽅法中不⽀持的东西,我们可以单独进⾏定义,需要使⽤action装饰器来⾃定义⽅法;serializer.py⽂件中添加如下代码
class ProjectNameSerializer(serializers.ModelSerializer):
class Meta:
model = Projects
# 2.指定模型类都使⽤哪些字段,来⽣成序列化器
# 使⽤全部字段
fields =("id","name")
class InterfaceNameSerializer(serializers.ModelSerializer):
class Meta:
model = Interfaces
# 2.指定模型类都使⽤哪些字段,来⽣成序列化器
# 使⽤全部字段
fields =("id","name","method")
class InterfacesByProjectIdSerializer(serializers.ModelSerializer):
interfaces_set = InterfaceNameSerializer(read_only=True,many=True)
class Meta:
model = Projects
# 2.指定模型类都使⽤哪些字段,来⽣成序列化器
# 使⽤全部字段
#注意此处的写法
fields =("id","interfaces_set")
views.py中选择:
class ProjectsViewSet(viewsets.ModelViewSet):
queryset = Projects.objects.all()
serializer_class = ProjectsModelSerializer
filter_backends =[DjangoFilterBackend]
ordering_fields =['name','id']
filterset_fields =['name','tester']
django项目实例#1.可以使⽤action装饰器来声明⾃定义动作
#默认情况下,实例⽅法名称就是动作名称
#methods参数⽤于指定该动作⽀持的请求⽅法,默认为get
#detail参数⽤于指定该动作⽤处理的是否为详情对象,(url是否需要传递pk值)
@action(methods=['get'],detail=False)
def names(self,request,*args,**kwargs):
querset = _queryset()
serializer = ProjectNameSerializer(instance=querset,many=True)
return Response(serializer.data)
@action(detail=False)
def interfaces(self, request,*args,**kwargs):
instance = _object()
serializer = InterfacesByProjectIdSerializer(instance = instance)
return Response(serializer.data)
urls.py中修改路径如下:
from django.urls import path
from projects import views
from projects.views1 import ProjectsList, ProjectDetail from.import views1
## 指定当前应⽤的命名空间
app_name ='projects'
urlpatterns =[
# path('', ProjectsList.as_view()),
# path('<int:pk>', ProjectDetail.as_view())
path('',views.ProjectsViewSet.as_view({
'get':'list',
'post':'create'
}),name ='projects-list'),
path('<int:pk>',views.ProjectsViewSet.as_view({
'get':'retrieve',
'put':'update',
'delete':'destroy'
})),
path('/names/',views.ProjectsViewSet.as_view({
'get':'names',
}),name ='projects-names'),
path('<int:pk>/interfaces/', views.ProjectsViewSet.as_view({ 'get':'interfaces',
}))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论