
技术分享1 分钟阅读
django ModelViewSet 常见操作
ModelViewSet 重写和继承
如果你想要在ModelViewSet的原有方法后面添加一些其他操作,你重写ModelViewSet的方法,并且在调用super()方法之后,加入你的自定义逻辑。例如:
class MyViewSet(ModelViewSet):
# 省略其他代码
def list(self, request, *args, **kwargs):
# 调用父类的list方法
response = super().list(request, *args, **kwargs)
# 在响应结果中添加一些自定义数据
response.data['extra'] = 'some extra data'
# 返回响应结果
return response这样,你就可以在保留ModelViewSet的原有功能的同时,添加一些自定义的操作。
ModelViewSet的增删改查的方法分别是:
create(self, request, *args, **kwargs):用于创建一个新的模型实例,对应POST请求。
list(self, request, *args, **kwargs):用于列出所有的模型实例,对应GET请求。
retrieve(self, request, *args, **kwargs):用于获取一个指定的模型实例,对应GET请求。
update(self, request, *args, **kwargs):用于更新一个指定的模型实例,对应PUT请求。
partial_update(self, request, *args, **kwargs):用于部分更新一个指定的模型实例,对应PATCH请求。
destroy(self, request, *args, **kwargs):用于删除一个指定的模型实例,对应DELETE请求。
list可以通过表字段搜索
默认的list无法通过表字段查询
from rest_framework import viewsets
from .models import MyModel
from .serializers import MyModelSerializer
class MyModelViewSet(viewsets.ModelViewSet):
serializer_class = MyModelSerializer
def get_queryset(self):
queryset = MyModel.objects.all()
query_params = self.request.query_params.dict()
if query_params:
queryset = queryset.filter(**query_params)
return queryset例如,如果我们想要过滤MyModel模型的id为1的数据,我们可以向API发送以下请求:
GET /mymodels/?id=1
这将返回一个只包含id为1的数据的JSON响应。同样的,如果我们想要过滤MyModel模型的name为"John"的数据,我们可以向API发送以下请求:
GET /mymodels/?name=John
这将返回一个只包含name为"John"的数据的JSON响应。
读者评论
评论会同步写入该文在 Notion 中的页面底部(与正文同页,便于管理)。
暂无评论,欢迎抢沙发。