增删改查,针对视图

我们需要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. Flask项目中数据库迁移的使用

    数据库迁移 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用 ...

  2. 报错:Type mismatch: cannot convert from Object to Car

    问题描述: 一个非常简单的spring项目,用静态工厂方法配置bean实例.项目的目录结构如下: 代码如下: Car.java package com.tt.spring.beans.factory; ...

  3. Chrome自定义最小字号

    ============= ============== =======================

  4. 一个好工具-everything-可以找到浏览器的所有缓存

    下载路径http://www.voidtools.com/downloads/ 我用它来寻找浏览器缓存的google瓦片.

  5. echarts-detail--柱状图

    一:柱形图 1.Echarts-柱状图柱图宽度设置-----只需要设置series中的坐标系属性barWidth就可以 /** * 堆积柱状图 * @param xaxisdata x轴:标签(数组) ...

  6. location.href 跳转之后,原来位置下面的代码还会继续执行

    location.href 跳转之后,原来位置下面的代码还会继续执行

  7. ubuntu版的sublime-text3输入中文问题

    前言 sublime-text3中看又中用,但是呢,ubuntu下有个问题,就是无法输入中文.这很难受啊,要写一些重要的内容时,总还是中文来的顺畅. 解决办法 工具:sublime-text-imfi ...

  8. erlang游戏开发tcp

    之前在开发游戏的时候我们采用smartfoxserver这个java开发的游戏引擎,这个引擎在开发回合制游戏方面速度还是不错的.但是面对客户日益增长的需求还是有些力不从心.比如集群,比如灾备,热切换, ...

  9. BZOJ - 4318: OSU! (期望DP&Attention)

    Description osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...

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

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