增删改查,针对视图

我们需要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 # 错误信息

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

  1. 模拟admin组件自己开发stark组件之创建篇

    admin组件 admin组件为我们提供了针对django管理页面 我们先简短来看下django的admin组件的启动流程,注册流程,url匹配过程 启动注册 1. 扫描所有应用下的注册了应用中的ad ...

  2. 模拟admin组件自己开发stark组件之自定义list_display,反向解析url

    反向解析 在上一篇文章中,我们创建好了stark这个组件,一个应用一个表有四个默认的url,那么我们如何区别这些url,因为可能会有重复现象(本组件不会,因为前面拼接了应用名,表明,肯定唯一),概念请 ...

  3. day054 组件 CBV FBV 装饰器 ORM增删改查

    组件: ​ 把一小段HTML 放在一个HTML中 nav.html ​ 使用: ​ {% include ‘nav.html ’ %} 一. FBV 和CBV 1.FBV(function base ...

  4. strak组件(8):基本增删改查实现及应用和排序

    效果图: 新增函数: def reverse_common_url(self, name, *args, **kwargs) 反向生成url,需要传增删改的url作为参数,携带原参数 def reve ...

  5. 模拟admin组件自己开发stark组件之搜索和批量操作

    搜索相关,搜索的本质就是从数据库查询出来的数据过滤 用户自定义给出过滤条件joker.py list_display = ('id','title','price',) show_add_btn = ...

  6. 巨蟒python全栈开发django5:组件&&CBV&FBV&&装饰器&&ORM增删改查

    内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...

  7. React组件式编程Demo-用户的增删改查

    1.项目结构 项目是基于webpack4, 参考 创建基本的webpack4.x项目 2.页面效果 初始化效果

  8. 使用虚拟机在ubuntu下搭建mongoDB开发环境和简单增删改查操作

    最近在折腾mongodb和nodejs,在imooc上找了一个mongodb的入门教程,跟着里面一步一步的走,下面记录下我操作的步骤和遇到的问题. 课程地址:http://www.imooc.com/ ...

  9. python全栈开发day62-两表操作增删改查,外键,if else模板语法

    一.今日内容总结: day62 内容回顾: 1. django有关所有命令: pip install django==1.11.14 django-admin startproject 项目名称 cd ...

随机推荐

  1. Linux驱动入门——构建和运行模块

    Hello world模块 本文介绍如何向内核中添加一个hello模块.该模块的功能是在模块加载时,向系统日志输出"hello world\n" 在模块卸载时输出"Goo ...

  2. 20165202 2017-2018-2 《Java程序设计》第6周学习总结

    教材学习内容总结 Ch8 String类: 程序可以直接使用,String类不能有子类 - 构造String对象 使用String类声明并创建对象 String s = new String(&quo ...

  3. Spring报错:java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist

    感谢:http://blog.chinaunix.net/uid-20681545-id-184633.html提供的解决方案,非常棒 ! 问题说明: 新建一个Spring项目,新建一个Bean类:H ...

  4. JS中关于把函数作为另一函数的参数的几点小总结

    //JS中关于把函数作为函数的参数来传递的问题的小总结//第一,最简单的形式无参函数,直接形式函数的函数名放到括号中,再在执行部分这个函数即可.//当然调用时要穿另一个真正的定义好的函数/*funct ...

  5. 目标检测 - Tensorflow Object Detection API

    一. 找到最好的工具 "工欲善其事,必先利其器",如果你想找一个深度学习框架来解决深度学习问题,TensorFlow 就是你的不二之选,究其原因,也不必过多解释,看过其优雅的代码架 ...

  6. linux下端口被占用

    1.查看端口 netstat -ano 参数含义: -a, --all  显示监听或非监听状态的接口 Show  both listening and non-listening (for TCP t ...

  7. Linux usleep for shell

    /**************************************************************************** * Linux usleep for she ...

  8. Floyd's Cycle Detection Algorithm

    Floyd's Cycle Detection Algorithm http://www.siafoo.net/algorithm/10 改进版: http://www.siafoo.net/algo ...

  9. java web构建学习(概念基础)

    1.什么是Java Web Application 一个Java web应用程序生成交互式web页面包含各种类型的标记语言(HTML.XML等)和动态内容.它通常由web组件例如JavaServer ...

  10. SSZipArchive使用详解

    下载SSZipArchive,点击我.或者自己在这里下载. SSZipArchive功能: 解压zip文件 解压密码保护的zip文件 创建zip文件 追加到zip文件 压缩文件 使用一个名字来压缩NS ...