继承ModelViewSet-增删改查分页过滤

本文探讨了Django的ModelViewSet如何通过简单的URL配置实现RESTful协议请求。ModelViewSet的继承结构被解析,并介绍了其如何利用Mixins实现增、查、改、删功能。同时,详细讲解了ModelViewSet中的过滤、排序和分页功能的实现,包括排序逻辑、过滤与排序的联合使用以及分页的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**
ViewSetMixin累源码分析
我们主要是来看下为什么通过url配置和ModelViewSet几行代码,就能实现request的restful协议请求
ModelViewSet类继承关系比较复杂,我先抛出一张简陋的父子关系继承图
**
在这里插入图片描述
ModelViewSet继承MiXin 我们实现api接口数据请求时,可以利用mixins模块来实现,也就是ModelViewSet的4个继承父类,分别实现了增加、获取单条数据、更新数据、删除销毁数据、获取所有表数据的功能,之前的mixins源码简单分析过,这里就不在一一重复赘述,后续的分析中,会拿出一个来配合GenericViewSet类代码进行分析

ModelViewSet 源码

class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):
    """
    A viewset that provides default `create()`, `retrieve()`, `update()`,
    `partial_update()`, `destroy()` and `list()` actions.
    """
    pass

Serializers.py

from rest_framework import serializers
from demoapp import models as dm1model

class UserSer(serializers.ModelSerializer):
    class Meta:
        #指定模型类
        model = dm1model.User   
        #指定序列化字段
        fields = "__all__"   #所有字段
        #fields = ("username","home")   #其中某几个字段
        #序列化深度,是否序列化外键
        depth = 1
        #只序列化字段
				read_only_fields = ('id', 'bread', 'bcomment')
        #额外参数,修改字段设置
        #extra_kwargs = {
   
        #   'age': {'min_value': 0, 'required': True},
        #   'hight': {'min_value': 0, 'required': True},
        #}

url.py

from django.urls import path,include,re_path
from demo3app.views import *
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register("user",UserModelView)



urlpatterns = [
    path("",include(router.urls)),
    # path("index1/",Index1.as_view()),

]

Vi

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值