Django中使用ModelForm实现Admin功能
接上一篇<Django中使用Bootstrap>
ModelForm 可以将数据库中的信息展示在一个表中,因此我们在查询数据库信息时可以使用ModelForm在前端展示查询到的信息。
在上篇中,要实现点击'id'时,可以显示该id的用户信息,并能修改相关信息。
一、展示数据库信息
1、在信息展示页面的'id'上添加<a>标签,使之在页面上点击'id'时跳转至客户详细信息页面,展示客户各项信息。
customer.py,点击'id'时url跳转至'/stu_crm/customer/id/'
<td><a href="/stu_crm/customer/{{ customer.id }}/">{{ customer.id }}</a></td>
2、添加新的url规则
stu_crm/urls.py
urlpatterns = [
url(r'^customer/(\d+)/$',views.customer_info),
]
3、在app(stu_crm)下创建forms.py
forms.py
from django.forms import Form,ModelForm
import models class CustomerModelForm(ModelForm):
class Meta:
model = models.Customer
exclude=() #显示所有字段 def __init__(self,*args,**kwargs):
super(CustomerModelForm,self).__init__(*args,**kwargs) #先继承父类中的__init__()方法,然后定义自己的 for field_name in self.base_fields: #遍历整个字段列表
field = self.base_fields[field_name]
field.widget.attrs.update({'class':'form-control'}) #给每个字段定义样式
4、添加customer_info处理函数
views.py
from stu_crm import forms def customer_info(request,customer_id):
customer_obj = models.Customer.objects.get(id=customer_id)
form = forms.CustomerModelForm(instance=customer_obj) #将查询到的客户信息塞到form中
return render(request,'stu_crm/customer_info.html',{'customer_info':form}) #将form(表单)以customer_info变量传递给前端页面
以上修改添加完毕后,点击页面的'id'就可以显示每条记录的详细信息了:

二、在页面中修改客户信息
要想修改并向后端服务器提交修改后的数据,需要使用form表单。
1、前端页面customer_info.html,参照bootstrap中的样式,稍加修改:
{% extends 'base.html' %}
{% load customer_tags %}
{% block page-header %}
客户详细信息
{% endblock %}
{% block page-content %}
<form class="form-horizontal" action="" method="post"> {% csrf_token %} #添加一个form表单,用于向后端提交数据
{# 循环每个字段 #}
{% for field in customer_info %}
<div class="form-group">
{# 字段名称 #}
{# 如果字段为必填,标签前面加*提示 #}
{% if field.field.required %}
<label class="col-sm-2 control-label">*{{ field.label }}</label>
{# 如果字段非必填 #}
{% else %}
{# 字体变细 #}
<label class="col-sm-2 control-label " style="font-weight:normal">{{ field.label }}</label>
{% endif %}
<div class="col-sm-10">
{# 字段内容 #}
{{ field }}
{# 如果存在错误 #}
{% if field.errors %}
{% for error in field.errors %}
<ul>
<li style="color: red">{{ error }}</li>
</ul>
{% endfor %}
{% endif %}
</div>
</div>
{% endfor %}
{# 添加提交按钮 #}
<input class="btn btn-success pull-right" type="submit" value="Submit">
</form>
{% endblock %}
2、后端处理函数views.py
from django.shortcuts import HttpResponse,redirect
...
def customer_info(request,customer_id):
customer_obj = models.Customer.objects.get(id=customer_id) #查询相应id的数据
if request.method=='POST':
form = forms.CustomerModelForm(request.POST,instance=customer_obj) #将customr_obj中相对应的内容修改为前端提交(request.POST)的,然后塞到form中用于前端展示
if form.is_valid():
form.save()
base_url='/'.join(request.path.split('/')[:-2]) #拼接url,修改完成后跳转显示各条信息列表
return redirect(base_url) #url跳转
else:
form = forms.CustomerModelForm(instance=customer_obj)
return render(request,'stu_crm/customer_info.html',{'customer_info':form}) #将form(表单)以customer_info变量传递给前端页面
Django中使用ModelForm实现Admin功能的更多相关文章
- Django中的ModelForm与Form
django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm. 关于django中的表单系统有两种: 基于django.forms.Form 基于dj ...
- django中的modelform和modelfoemset
一. ModelForm ModelForm是根据Model来定制的Form 二. ModelForm的创建 from django import forms from app import mode ...
- Django中扩展Paginator实现分页
Reference:https://my.oschina.net/kelvinfang/blog/134342 Django中已经实现了很多功能,基本上只要我们需要的功能,都能够找到相应的包.要在Dj ...
- Django中的admin组件分析
admin的使用介绍 django-admin的使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 setting ...
- django中的django admin插件
一.django admin前言 1.admin的作用 为了方便后台开发者快速的部署测试环境,于是就产生了admin,admin主要是操作models中的类从而实现对数据库中的数据增删改查的操作. 2 ...
- Django中ModelForm应用
Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...
- Django基础之forms组件中的ModelForm组件
Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样 ...
- Django 中 ModelForm 的使用
定义 ModelForm 定制 ModelForm Meta 在 Form 中另外定义 Field 值得一提的一些 Field 转化 AutoField BooleanField ForeignKey ...
- Django 中自定义用户模型及集成认证授权功能总结
1. 概述 Django 中的 django.contrib.auth 应用提供了完整的用户及认证授权功能. Django 官方推荐基于内置 User 数据模型创建新的自定义用户模型,方便添加 bir ...
随机推荐
- jxl 导入excel
jsp部分 <div class="modal-dialog"> <div class="modal-content"> <div ...
- js控制键盘按键(回车、空格)
<script type="text/javascript"> $(function(){ $(document).keypress(function ...
- 简易js网页实时时钟日历
<script language="javascript"> function timeF(i){ if(i<10){ i="0"+i; } ...
- Chapter 17_2 备忘录函数
一项通用的编程技术:用空间换时间. 例如有一种做法就可以提高一些函数的运行速度,记录下函数计算的结果,当再次调用该函数时,便可以复用之前的结果. 比如,一个普通服务器,在它收到请求中包含Lua代码,会 ...
- C#中的DataSet添加DataTable问题
最近在使用DataTable来给前台控件绑定数据,开始时查了网上的一些给DataSet添加DataTable时需要注意的地方,一般都要添加表名并且使用DataTable.Copy()方法,否则会报错, ...
- CSS绑定
css绑定会对元素的CSS类进行操作.在某些情况下这将非常有用,例如:当数值是负的时将其高亮显示. (注:如果如果不想直接更改CSS类,而是只要改其中一个样式,则需要使用style绑定) 示例:使用静 ...
- web前端-雅虎34条规则优化
1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是 ...
- Hive 常用函数
参考地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 1. parse_url(url, partToExt ...
- TheSixthWeekJavaText
加密文档 实验要求编写一个算法加密一串英文字串. 设计思想:对于一个字符串,我们可以用String.charAt()方法依次取出其中的字符元素,组成一个字符数组.由于字符可以转化为short类型变量进 ...
- A*寻路算法 (cocos2d-js详细代码)
看了几天的A*算法,感觉要成为一个游戏开发者,有必要把这个著名的算法拿到手. 网上有此算法的代码片段,但主要还是些模板类的伪代码,所以想分享一段完整的A*算法代码供大家更好的理解!(这里使用的是js语 ...