接上一篇<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. python3.5 修改 IIS WEB.CONFIG的相关方法

    #!/usr/bin/env python3.5 # -*- coding:utf8 -*- from xml.etree.ElementTree import ElementTree,Element ...

  2. homebrew for mac

    注意 如果bash_profile 文件路径写错了,而导致很多命令不能使用 可以在终端 /usr/bin/vim ~/.bash_profile    打开编辑  esc退出  按冒号(:)再按wq ...

  3. js字符串操作

    javascript中字符串常用操作总结.JS字符串操作大全 String对象属性 (1) length属性 length算是字符串中非常常用的一个属性了,它的功能是获取字符串的长度.当然需要注意的是 ...

  4. 【 VS 插件开发 】二、了解Vs插件结构

    [ VS 插件开发 ]二.了解Vs插件结构

  5. #大数加减乘除#校赛D题solve

    #include<iostream> #include<cstdio> #include<cstring> #include<string> #incl ...

  6. delphi const

    参考:http://www.cnblogs.com/tibetwolf/articles/1785744.html 1.const修饰可能会优化编译代码.关于这一点与编译器密切相关,由于变量被cons ...

  7. Scala文件操作

    Scala中的文件操作基本可以依赖于Java的实现,包括输入.输出流的使用. object FileOps {def main(args: Array[String]) { val file = So ...

  8. Eclipse中安装Jdk和配置Python

    要借助Eclipse辅助工作,之前安装配置都是同事帮忙弄的,今天有空来整理一下安装配置步骤 一.安装JDK1.下载JDK,安装JDK,安装完毕,配置JDK环境变量  1)我的电脑右键-属性-高级-点击 ...

  9. jquery获取radio的值

    Html代码是 <label><input type="radio" name="proofing" value="1"& ...

  10. C++从函数返回指针

    C++ 允许您从函数返回指针.为了做到这点,必须声明一个返回指针的函数,如下所示: int * myFunction() { . . . } 另外,C++ 不支持在函数外返回局部变量的地址,除非定义局 ...