模拟admin组件自己开发stark组件之增删改查

增删改查,针对视图

我们需要modelform来创建,可自动生成标签,我们还要考虑用户是不是自己定制,依然解决方法是,继承和重写

app01下的joker.py文件

class BookModelForm(ModelForm):
    class Meta:
        model = models.Book
        fields = "__all__"
        error_messages={
            "title":{"required":"该字段不能为空"}
        }
        widgets={
            "pub_date":widgets.TextInput(attrs={"type":"date"}),
        }

class bookjoker(joker.ModelAdmin):   # 自定义样式类
    list_display = (‘id‘,‘title‘,)
    model_form_class = BookModelForm  # 自己定制 form

joker.site.register(models.Book,bookjoker)

样式类中判断类属性有没有用户自定义,没有就用自己的

 model_form_class = None
    def get_model_form_class(self):
        if self.model_form_class:    # 如果用户自己写了form,就走这里
            return self.model_form_class
        else: # 用户没有自己创建form,那么我们执行默认的
            from django.forms import ModelForm

            class model_form_class(ModelForm):  # 我自己定义的验证,返回了地址
                class Meta:
                    model = self.model
                    fields = ‘__all__‘
            return model_form_class

#===========================================增删改查视图

    def add_view(self, request):
        # 基于form添加表单,需要判断输入情况了
        model_form_class = self.get_model_form_class()
        if request.method == ‘GET‘:
            form = model_form_class()   # 实例化这个modelform验证
            return render(request,‘joker/add_view.html‘,locals())
        else:
            form = model_form_class(request.POST)  # 传来的是数据
            if form.is_valid():   # 验证通过
                form.save()    # 加入数据库保存
                return redirect(self.get_list_url())   # 返回查看页
            else:
                return render(request,‘joker/add_view.html‘,locals())  # 报错页面
   def delete_view(self,request,id):
        if request.method==‘GET‘:
            return render(request,‘joker/delete_view.html‘)  # 删除页面,给予提示删除
        else:
            self.model.objects.filter(pk=id).delete()   # 删除数据
            return redirect(self.get_list_url())

    def change_view(self,request,id):
        edit_obj = self.model.objects.filter(pk=id).first()  # 拿到修改对象
        if not edit_obj:  # 因为有可能用户在url上手动输入错误
            return redirect(self.get_list_url())

        model_form_class = self.get_model_form_class()  #
        if request.method == ‘GET‘:
            form = model_form_class(instance=edit_obj)   # 初始化数据
            return render(request,‘joker/change_view.html‘,locals())
        else:
            form = model_form_class(request.POST,instance=edit_obj)  # 针对谁做更新操作
            if form.is_valid():   # 验证通过
                form.save()   # 更新
                return redirect(self.get_list_url())

到这里主要效果实现:

我们来看下一些需要注意的地方

model_name = model._meta.model_name      # 应用名称
app_label = model._meta.app_label        # 表名

###### 字符串,肯定就是字段了,例如 title字段到这里,就会得到verbose_name名字,如果没有verbose_name那就是本身名称
verbox_name = self.model._meta.get_field(field_name).verbose_name
field.label  # 这是form里面,如果传来是对象,.label打印数据库字段,如果有verbose_name打印这个值field.errors.0 # 错误信息

原文地址:https://www.cnblogs.com/jokerbj/p/8390570.html

时间: 2024-08-01 15:17:22

模拟admin组件自己开发stark组件之增删改查的相关文章

快速开发:单表增删改查

EOS快速开发提供了一键生成代码向导,通过功能向导可生成JSP页面.以及业务逻辑代码. 下面就以单表的简单操作为例,介绍EOS快速开发. 在Web页面上展现数据库中的一张表,实现了对单表的数据库查询.增加与删除功能操作,并且实现了分页查询,效果如下图所示. 一.效果图 1. 查询与结果效果图 2. 录入与修改表单效果图 二.创建数据模型 1. 右键点击"资源管理器"视图中,用户创建的构件包下的"数据/数据模型"节点,选择[创建/数据集]菜单,如下图所示,创建一个名为

iOS开发之数据库:增删改查

如何导入数据库? 首先要链接库,点击工程??选择Build Phases 下方有个Link Binary,点+ 搜索sqlite,选择libsqlite3.tbd ranh

iOS开发之数据库:增删改查之改、删

//修改学生数据 func updateStudents(){ //准备sql语句 let string:NSString = "update Student set score = 100 where name like 'a%'" let sql = string.UTF8String //执行sql语句 if sqlite3_exec(db, sql, nil, nil, nil) != SQLITE_OK { sqlite3_close(db) print("upda

popup的简单应用举例(具体在增删改查组件中用到)以及补充的知识点

popup的简单应用举例(具体在增删改查组件中用到)以及补充的知识点 一.首先说一下自执行函数 1. 立即执行函数是什么?也就是匿名函数 立即执行函数就是 声明一个匿名函数 马上调用这个匿名函数 2.popup的举例 点击,弹出一个新的窗口.保存完事,页面不刷新数据就返回了.(点击admin的+,弹出的框就是用popup来做的) 具体操作步骤: 1.urls.py urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/',

VUE2.0增删改查附编辑添加model(弹框)组件共用

Vue实战篇(增删改查附编辑添加model(弹框)组件共用) 前言 最近一直在学习Vue,发现一份crud不错的源码 预览链接 https://taylorchen709.github.io/vue-admin/#/login 自己下载下来后仔细研究了起来,发现编辑和增加写了两个弹框,我觉得这不符合vue的组件原则,于是自己把编辑和添加改成共用的 因为也是纯粹的写写前端页面,所以数据方面用的是mock.js,真实的模拟请求. 这个项目用到的 技术栈: vue + webpack + vuex +

JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查

前言:之前博主分享过knockoutJS和BootstrapTable的一些基础用法,都是写基础应用,根本谈不上封装,仅仅是避免了html控件的取值和赋值,远远没有将MVVM的精妙展现出来.最近项目打算正式将ko用起来,于是乎对ko和bootstraptable做了一些封装,在此分享出来供园友们参考.封装思路参考博客园大神萧秦,如果园友们有更好的方法,欢迎讨论. KnockoutJS系列文章: JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一) JS组件

JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(二)

前言:上篇 JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一) 介绍了下knockout.js的一些基础用法,由于篇幅的关系,所以只能分成两篇,望见谅!昨天就觉得应该快点完成下篇,要不然有点标题党的感觉,思及此,博主心有不安,于是加班赶出了下篇.如果你也打算用ko去做项目,且看看吧! 一.效果预览 其实也没啥效果,就是简单的增删改查,重点还是在代码上面,使用ko能够大量节省界面DOM数据绑定的操作.下面是整个整个增删改查逻辑的js代码: 页面效果: 二.

【ActionScript】ActionScript3.0对舞台组件的增删改查

以一个例子来说明ActionScript3.0对舞台组件的增删改查 如下图: 在Flash运行的时候,通过脚本,斜向下生成text0-text9十个文本节点. 提供两个功能, 1.在右上角,用户输入要删除的节点,点击"删除"之后,而删除相应的文本节点. 2.在下方,用户输入要移动的节点,然后输入合法的X与Y,则可以把节点移动到相应的地方. 一.基本布局 1.首先新建一个ActionScript3.0的Flash文件.之后如同<[ActionScript]ActionScript3

基于SpringBoot开发一个Restful服务,实现增删改查功能

在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练.不过在看了很多关于SpringBoot的介绍之后,并没有想象中的那么难,于是开始准备学习SpringBoot. 在闲暇之余的时候,看了下SpringBoot实战以及一些大神关于SpringBoot的博客之后,开始写起了我的第一个SpringBoot的项目.在能够对SpringBoot进行一些简单的开发Re