模拟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 # 错误信息
模拟admin组件自己开发stark组件之增删改查的更多相关文章
- 模拟admin组件自己开发stark组件之创建篇
admin组件 admin组件为我们提供了针对django管理页面 我们先简短来看下django的admin组件的启动流程,注册流程,url匹配过程 启动注册 1. 扫描所有应用下的注册了应用中的ad ...
- 模拟admin组件自己开发stark组件之自定义list_display,反向解析url
反向解析 在上一篇文章中,我们创建好了stark这个组件,一个应用一个表有四个默认的url,那么我们如何区别这些url,因为可能会有重复现象(本组件不会,因为前面拼接了应用名,表明,肯定唯一),概念请 ...
- day054 组件 CBV FBV 装饰器 ORM增删改查
组件: 把一小段HTML 放在一个HTML中 nav.html 使用: {% include ‘nav.html ’ %} 一. FBV 和CBV 1.FBV(function base ...
- strak组件(8):基本增删改查实现及应用和排序
效果图: 新增函数: def reverse_common_url(self, name, *args, **kwargs) 反向生成url,需要传增删改的url作为参数,携带原参数 def reve ...
- 模拟admin组件自己开发stark组件之搜索和批量操作
搜索相关,搜索的本质就是从数据库查询出来的数据过滤 用户自定义给出过滤条件joker.py list_display = ('id','title','price',) show_add_btn = ...
- 巨蟒python全栈开发django5:组件&&CBV&FBV&&装饰器&&ORM增删改查
内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: ...
- React组件式编程Demo-用户的增删改查
1.项目结构 项目是基于webpack4, 参考 创建基本的webpack4.x项目 2.页面效果 初始化效果
- 使用虚拟机在ubuntu下搭建mongoDB开发环境和简单增删改查操作
最近在折腾mongodb和nodejs,在imooc上找了一个mongodb的入门教程,跟着里面一步一步的走,下面记录下我操作的步骤和遇到的问题. 课程地址:http://www.imooc.com/ ...
- python全栈开发day62-两表操作增删改查,外键,if else模板语法
一.今日内容总结: day62 内容回顾: 1. django有关所有命令: pip install django==1.11.14 django-admin startproject 项目名称 cd ...
随机推荐
- Python的介绍及Pycharm软件的安装
一.Python介绍 1. Python是一种解释性.面向对象.动态数据类型的高级程序设计语言. Python语言创始人是吉多.范罗苏姆:起源与1989年 2. 缺点:运行速度慢(由于是解释性语言 ...
- 在Golang中获取系统的磁盘空间内存占用
获取磁盘占用情况(Linux/Mac下有效) import ( "syscall" ) type DiskStatus struct { All uint64 `json:&quo ...
- vue中父子组件值的传递
父传子 父组件:
- mysql 时间转换 用EXCEL实现MySQL时间戳格式和日期格互转
今天项目表中需要导入好几w条数据 ,但日期由两个一个是标准时间一个为时间戳,程序中搜索是根据时间戳来搜索的,所以在网上翻箱倒柜的终于找到解决之道了,利用excel转换时间戳 时间戳转成正常日期的公式: ...
- 使用Percona Xtrabackup创建MySQL slave库
一.使用Percona Xtrabackup创建MySQL slave库 MySQL Server 版本: Server version: 5.7.10-log MySQL Community Ser ...
- .NET实现CORS跨域
1.NuGet:Install-Package Microsoft.AspNet.WebApi.Cors 2.Application_Start中增加(包含在#if DEBUG中):GlobalCon ...
- save the transient instance before flushing错误解决办法 【待完善】
近日在项目中遇到以下错误,着实郁闷了一把: org.hibernate.TransientObjectException: object references an unsaved transient ...
- 【Codeforces】Round #488 (Div. 2) 总结
[Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...
- nginx+tomcat 配置负载均衡集群 (转载)
一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...
- Backward Digit Sums
FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to N (1 <= N < ...