前情提要:Django  stark 组件开发的 增删改, 

    model_form组件的使用

    form组件的回顾

 一:list_display_link  创建

  功能描述:  

   使包含的字段能用进行跳转(编辑界面)

    1:在strak组件中设置对应的接口

  

      2:在注册表中填写注册的内容

注意该内容要对应自制列中的属性元素,即model的属性名

    3:在stark中给model普通属性附加a标签

 

 4:效果图 ,即实现了反向解析,又实现了编辑功能

 

 

二:form 组件回顾

1: form 表单的功能

2: form 表单的参数

3:form 表单的一对多,以及多对多

  3>1

 3>2

多对多样式显示

 

 4 :form 表单样式的调用

5:钩子函数

6:钩子函数的调用

 

三:modelform组件的学习

modelform 可以 减少字段的使用

功能!: 将model 转化成form 

model ------>form  不用亲自写form 

原来需要自己动手写form 模型类

现在不需要自己动手即可完成 

1:modelform  组件

是form 组件的进阶版本,可以更加高效的实现form组件功能

在此之上,还增加了数据渲染功能,至此大大减少了代码的使用量

 

 2:modelform组件的增加界面

views 视图

 路由层

前端代码

 

前端效果

 3:modelform 组件 的修改

 3>1

get请求获取内容

视图

路由

前端代码

效果

3>2: post请求部分\

注意添加还是更新取决于后面是否有instance=对象这个属性,有就是更新

 

 

四:modelform 在stark组件的应用

  1:创建modelform对象()供后面的内容使用

创建:接口,供子类进行修改

 

子类重写

   

重写model_for_calss

重写类似如下:

 

  1>1:首先导包

 

from django.forms import ModelForm  # 导入包
导入modelform ,创建方法get_model_form

 

创建modelform 继承modelform 类,创建Meta 类(固定写法),供调用,
model =self.model 传入当前操作的表对象, 默认的获取全部
返回默认的类,如果有自定制的类则使用自定制类

 

  2:写add_view视图函数

    2>1:编写add_view方法,

    get请求:    

    获取当前操作的表对象modelform类,

    实例化modelform 获取渲染内容

    POST请求:

    modelform 实例接收请求内容

    判断内容是否符合要求  

      然后save() 实例对象,会自动把内容加到数据库中

     否则,返回add界面

视图层:

前端代码:

include代码

<div class="container">
<div class="row">
<div class="col-md-6">
<form action="" method="post" novalidate>
{% csrf_token %} {% for field in form_obj %}
<div class="form-group">
<label for="">{{ field.label }}</label>
{{ field }} <span class="error pull-right">{{ field.errors.0 }}</span>
</div>
{% endfor %} <button class="btn btn-default">submit</button> </form>
</div>
</div>
</div>

 

 

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<style>
input,select{
display: block;
width: 100%;
height: 34px;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
} .error{
color: red;
}
</style>
</head>
<body>
{% include "stark/form.html" %}
</body>
</html>

 

 前端界面

 

 

 

     3: 更改界面

    3>1 :

知识点:

modelform 实例对象通过传入当前操作的实例对象进行渲染该对象的内容

注意修改时要用instance=modelform的对象,可以进行渲染

 

 前端代码:

与add继承相同

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <style>
input,select{
display: block;
width: 100%;
height: 34px;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
color: #555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 4px;
} .error{
color: red;
}
</style>
</head>
<body>
{% include "stark/form.html" %}
</body>
</html>

 

 前端效果

实现反向解析

 

 

4:删除数据

也是通过反向解析获取id,

直接通过pk主键删除对象,然后跳转展示界面

 

 前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> </head>
<body>
<form action="" method="post">
{% csrf_token %}
<a href="{{list_url}}" class="btn btn-warning">取消</a>
<input type="submit" class="btn btn-danger" value="确认删除">
</form>
</body>
</html>

前端效果:

反向解析

  1. show_index/

 五:分页组件的应用

全局对象

.conut 显示对象个数

numpage. 显示每页多少个

page_range 显示 页数范围

分页对象

has_next() 是否有上一页

has_previous 是否有下一页

next_page_number  转到下一页

previous_page_number 转到上一页

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<ul>
{% for foo in page %}
<li>{{foo}}</li>
{% endfor %} </ul>
<nav aria-label="Page navigation">
<ul class="pagination"> {% if page.has_previous%}
<li>
<a href="?page={{ page.previous_page_number }}" aria-label="Next">
<span aria-hidden="true">上一页</span>
</a>
</li>
{% else %}
<li class="disabled">
<a href="#" aria-label="Next">
<span aria-hidden="true">上一页</span>
</a>
</li>
{% endif %} {% for num in paginator.page_range %}
{% if current_page == num %}
<li class="active"><a href="?page={{ num }}">{{ num }}</a></li>
{% else %}
<li><a href="?page={{ num }}">{{ num }}</a></li>
{% endif %} {% endfor %} {% if page.has_next %}
<li>
<a href="?page={{ page.next_page_number }}" aria-label="Next">
{# a标签当前界面拼接#}
<span aria-hidden="true">下一页</span>
</a>
</li>
{% else %}
<li class="disabled">
<a href="#" aria-label="Next">
<span aria-hidden="true">下一页</span>
</a>
</li>
{% endif %} </ul>
</nav>
</body>
</html>

前端效果

import os
 
from django.core.paginator import Paginator
objects = ['john','paul','george','ringo','lucy','meiry','checy','wind','flow','rain']<br>
p = Paginator(objects,3)  # 3条数据为一页,实例化分页对象
print p.count  # 10 对象总共10个元素
print p.num_pages  # 4 对象可分4页
print p.page_range  # xrange(1, 5) 对象页的可迭代范围
 
page1 = p.page(1)  # 取对象的第一分页对象
print page1.object_list  # 第一分页对象的元素列表['john', 'paul', 'george']
print page1.number  # 第一分页对象的当前页值 1
 
page2 = p.page(2)  # 取对象的第二分页对象
print page2.object_list  # 第二分页对象的元素列表 ['ringo', 'lucy', 'meiry']
print page2.number  # 第二分页对象的当前页码值 2
 
print page1.has_previous()  # 第一分页对象是否有前一页 False
print page1.has_other_pages()  # 第一分页对象是否有其它页 True
 
print page2.has_previous()  # 第二分页对象是否有前一页 True
print page2.has_next()  # 第二分页对象是否有下一页 True
print page2.next_page_number()  # 第二分页对象下一页码的值 3
print page2.previous_page_number()  # 第二分页对象的上一页码值 1
print page2.start_index()  # 第二分页对象的元素开始索引 4
print page2.end_index()  # 第2分页对象的元素结束索引 6

day67 crm(4) stark组件的增删改 以及 model_from使用和from组件回顾的更多相关文章

  1. 【ActionScript】ActionScript3.0对舞台组件的增删改查

    以一个样例来说明ActionScript3.0对舞台组件的增删改查 例如以下图: 在Flash执行的时候,通过脚本.斜向下生成text0-text9十个文本节点. 提供两个功能. 1.在右上角,用户输 ...

  2. stark组件的增删改(新)

      1.效果图 2.详细步骤解析 3.总结.代码   1.效果图 增 删除 改 2.详细步骤解析 1.构造增删改查url,反向解析 2.ModelForm定制add.edit页面 3.starak中的 ...

  3. stark组件的增删改

      1.效果图 2.详细步骤解析 3.总结.代码   1.效果图 增 删除 改 2.详细步骤解析 1.构造增删改查url,反向解析 2.ModelForm定制add.edit页面 3.starak中的 ...

  4. 模拟admin组件自己开发stark组件之增删改查

    增删改查,针对视图 我们需要modelform来创建,可自动生成标签,我们还要考虑用户是不是自己定制,依然解决方法是,继承和重写 app01下的joker.py文件 class BookModelFo ...

  5. day25 crm 权限管理 通用的增删改查框架

    代码: https://github.com/liyongsan/git_class/tree/master/day25/LuffyCRM

  6. CRM基于.NET的增删改查

    一.准备工作: 1.添加 microsoft.crm.sdk.proxy.dll和microsoft.xrm.sdk.dll 引用到项目中!并引用以下using! using Microsoft.Xr ...

  7. VUE2.0增删改查附编辑添加model(弹框)组件共用

    Vue实战篇(增删改查附编辑添加model(弹框)组件共用) 前言 最近一直在学习Vue,发现一份crud不错的源码 预览链接 https://taylorchen709.github.io/vue- ...

  8. SQL Server温故系列(1):SQL 数据操作 CRUD 之增删改合

    1.插入语句 INSERT INTO 1.1.用 INSERT 插入单行数据 1.2.用 INSERT 插入多行数据 1.3.用 INSERT 插入子查询结果行 1.4.INSERT 小结及特殊字段插 ...

  9. 9 stark组件 增删改

    1.效果图 2.详细步骤解析 1.构造增删改查url,反向解析 2.ModelForm定制add.edit页面 3.staradmin中的ModelForm 3.总结.代码 1.知识点 1.解决代码重 ...

随机推荐

  1. [原创] 分享一下Sencha 三种环境(开发环境、测试环境、生产环境)的优雅配置方案

    背景介绍: 在一个AspNet MVC Web API的后端Web开发项目中,使用了Sencha6.5+作为前端表现技术. 在进行两种开发框架的物理文件整合的时候,笔者不想把他俩的物理文件都“揉”在一 ...

  2. 2018上IEC计算机高级语言(C)作业 第2次作业

    2018上IEC计算机高级语言(C)作业 第2次作业 一.例程调试(20分) 调试下面1个例程,各位同学调试用自己的学号模4加1序号的题,写清错误提示(截小图)及修改内容(10分); 说明:有可能没有 ...

  3. 2018.08.30 bzoj4720: [Noip2016]换教室(期望dp)

    传送门 一道无脑的期望dp. 用f[i][j][0/1]表示前i堂课提出了j次申请且第i堂课没有(有)提出申请. 这样就可以状态转移了. 然而这题状态转移方程有点长... (主要是情况多... 代码: ...

  4. 2018.07.23 洛谷P4513 小白逛公园(线段树)

    传送门 线段树常规操作了解一下. 单点修改维护区间最大连续和. 对于一个区间,维护区间从左端点开始的连续最大和,从右端点开始的连续最大和,整个区间最大和,区间和. 代码如下: #include< ...

  5. hdu-1728(bfs+优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 注意:1.先输入起点(y1,x1)和终点(y2,x2): 2.如果一个一个遍历会超时. 思路:每 ...

  6. C语言之计算字符串最后一个单词的长度,单词以空格隔开

    //计算字符串最后一个单词的长度,单词以空格隔开. #include<stdio.h> #include<string.h> #include<windows.h> ...

  7. js获取年月日时分秒星期

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. (树的直径)LightOJ -- 1094

    链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#problem/C 求树的直径,这里只不过给每条边增加一个边长属性,变成 ...

  9. Hdu1969 Pie 2017-01-17 13:12 33人阅读 评论(0) 收藏

    Pie Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissio ...

  10. ORA-20002: [WF_NO_USER] NAME=<name> ORIG_SYSTEM=NULL ORIG_SYSTEM_ID=NULL

    Solution APPLIES TO: Identity Manager Connector - Version 10.1.2 to 10.1.2Oracle User Management - V ...