模拟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 ...
随机推荐
- Function.bind 方法
this.num = 9; var mymodule = { num: 81, getNum: function() { return this.num; } }; module.getNum(); ...
- yii2.0 使用不同语言
1.建立语言目录.文件.项目根目录建立messages文件夹.存放不同语言对应的目录文件. 例如中文和英文 message 下建立两个文件夹 en.zh_CN 里面可以对应着多个翻译文件 2.在mai ...
- UCB算法
前言: 来万物花开这家创业公司实习,也真是一波三折.先实习了三天,每天下午到公司工作到晚上.工作时间是每天下午到晚上9.30.结果每天上午没法用心干实验室的活了,下午在公司工作的时候,总是提心吊胆,手 ...
- LOJ2325. 「清华集训 2017」小 Y 和恐怖的奴隶主【矩阵快速幂优化DP】【倍增优化】
LINK 思路 首先是考虑怎么设计dp的状态 发现奴隶主的顺序没有影响,只有生命和个数有影响,所以就可以把每个生命值的奴隶主有多少压缩成状态就可以了 然后发现无论是什么时候一个状态到另一个状态的转移都 ...
- 阿里云ECS 环境是CentOS 7.3安装mongodb3
CentOS安装mongodb https://www.cnblogs.com/zddzz/p/10069912.html CentOS安装mongodb 我的是阿里云ECS 环境是CentOS 7. ...
- Object-C 中的Selector 概念
selector可以叫做选择器,其实指的就是对象的方法,也可以理解为C语言里面的函数指针,在面向对象里面的对应概念. @selector(xxxx)的作用是找到名字为xxxx的方法.一般用于[a pe ...
- Django(一):从socket到MVC
一.socket的http套路 web应用本质上是一个socket服务端,用户的浏览器是一个socket客户端.socket处在应用层与传输层之间,是操作系统中I/O系统的延伸部分(接口),负责系统进 ...
- java中如何高效的判断数组中是否包含某个元素---
package zaLearnpackage; import org.apache.commons.lang3.ArrayUtils; import java.util.Arrays; import ...
- 《DSP using MATLAB》示例Example 8.13
%% ------------------------------------------------------------------------ %% Output Info about thi ...
- nginx grpc 试用
1. 编译 wget https://nginx.org/download/nginx-1.13.10.tar.gz tar xvf nginx-1.13.10.tar.gz cd nginx-1.1 ...