增删改查,针对视图

我们需要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. Python的介绍及Pycharm软件的安装

    一.Python介绍 1.  Python是一种解释性.面向对象.动态数据类型的高级程序设计语言. Python语言创始人是吉多.范罗苏姆:起源与1989年 2.  缺点:运行速度慢(由于是解释性语言 ...

  2. 在Golang中获取系统的磁盘空间内存占用

    获取磁盘占用情况(Linux/Mac下有效) import ( "syscall" ) type DiskStatus struct { All uint64 `json:&quo ...

  3. vue中父子组件值的传递

    父传子 父组件:

  4. mysql 时间转换 用EXCEL实现MySQL时间戳格式和日期格互转

    今天项目表中需要导入好几w条数据 ,但日期由两个一个是标准时间一个为时间戳,程序中搜索是根据时间戳来搜索的,所以在网上翻箱倒柜的终于找到解决之道了,利用excel转换时间戳 时间戳转成正常日期的公式: ...

  5. 使用Percona Xtrabackup创建MySQL slave库

    一.使用Percona Xtrabackup创建MySQL slave库 MySQL Server 版本: Server version: 5.7.10-log MySQL Community Ser ...

  6. .NET实现CORS跨域

    1.NuGet:Install-Package Microsoft.AspNet.WebApi.Cors 2.Application_Start中增加(包含在#if DEBUG中):GlobalCon ...

  7. save the transient instance before flushing错误解决办法 【待完善】

    近日在项目中遇到以下错误,着实郁闷了一把: org.hibernate.TransientObjectException: object references an unsaved transient ...

  8. 【Codeforces】Round #488 (Div. 2) 总结

    [Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...

  9. nginx+tomcat 配置负载均衡集群 (转载)

    一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...

  10. Backward Digit Sums

    FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N < ...