接上一篇<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功能的更多相关文章

  1. Django中的ModelForm与Form

    django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm. 关于django中的表单系统有两种: 基于django.forms.Form 基于dj ...

  2. django中的modelform和modelfoemset

    一. ModelForm ModelForm是根据Model来定制的Form 二. ModelForm的创建 from django import forms from app import mode ...

  3. Django中扩展Paginator实现分页

    Reference:https://my.oschina.net/kelvinfang/blog/134342 Django中已经实现了很多功能,基本上只要我们需要的功能,都能够找到相应的包.要在Dj ...

  4. Django中的admin组件分析

    admin的使用介绍 django-admin的使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 setting ...

  5. django中的django admin插件

    一.django admin前言 1.admin的作用 为了方便后台开发者快速的部署测试环境,于是就产生了admin,admin主要是操作models中的类从而实现对数据库中的数据增删改查的操作. 2 ...

  6. Django中ModelForm应用

    Django中ModelForm的应用 在传统中Form提交的POST的数据在服务器端获取时将不得不一一获取并验证数据的可靠性,但是使用django提供的Form时可简化该过程并提供相应的验证,同时D ...

  7. Django基础之forms组件中的ModelForm组件

    Django的model form组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样 ...

  8. Django 中 ModelForm 的使用

    定义 ModelForm 定制 ModelForm Meta 在 Form 中另外定义 Field 值得一提的一些 Field 转化 AutoField BooleanField ForeignKey ...

  9. Django 中自定义用户模型及集成认证授权功能总结

    1. 概述 Django 中的 django.contrib.auth 应用提供了完整的用户及认证授权功能. Django 官方推荐基于内置 User 数据模型创建新的自定义用户模型,方便添加 bir ...

随机推荐

  1. CAD打开缓慢问题解决方法

    打开AutoCAD很卡,大概需要1分钟 打开Internet Explorer,点击工具菜单,打开"Internet选项",去勾选"检查发行商的证书是否吊销", ...

  2. linux操作系统简单使用

    文章将包含几个内容: linux简介 linux操作系统的安装简述 linux操作系统的磁盘文件结构 linux操作系统中的文件操作 linux中的用户管理 网络配置管理 常用系统管理指令 linux ...

  3. 对于行高(line-height)的一些理解

    刚一开始学习这个特性的时候,总是出一些当时看起来很奇怪的问题.现在决定重新整理一下.毕竟使用css,十行揉在一起凑出效果是一种使用,知道为什么会有这种效果也是一种使用.我们需要做一些测试,所以首先需要 ...

  4. AFURLRequestSerialization

    NSString * AFPercentEscapedStringFromString(NSString *string)   //去除非法字符并且对特殊字符进行编码.  //对字符串进行百分比编码 ...

  5. filter怎么在程序里写,不用再web.xml中配置

  6. 30分钟学习sea.js使用指南

    : seajs如何解决? ①引入sea.js的库 <script src="../sea/sea.js" ></script> ②如何变成模块? defin ...

  7. R安装

    linux: 在编译R之前,需要通过yum安装以下几个程序: #yum install gcc-gfortran              #否则报”configure: error: No F77 ...

  8. JAVA-反射学习

    原文:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 个人总结: 1. 反射是什么:由字节码文件(.class)获取 ...

  9. 【XML】document.createEvent的使用方法

    <aclass="comment-mod"onclick="alert('ss')"href="#">评论</a> ...

  10. Zeppelin0.6.2使用hive解释器

    Zeppelin0.6.2的jdbc Interpreter 配置 1.拷贝hive的配置文件hive-site.xml到zeppelin-0.6.2-bin-all/conf下. 2.进入conf下 ...