python 学习笔记十六 django深入学习一 路由系统,模板,admin,数据库操作

时间:2023-11-24 10:14:26

django 请求流程图

python 学习笔记十六 django深入学习一 路由系统,模板,admin,数据库操作

django 路由系统

在django中我们可以通过定义urls,让不同的url路由到不同的处理函数

from . import views

urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003), #精确匹配
url(r'^articles/([0-9]{4})/$', views.year_archive), #动态路由
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]

注意: url的位置对于url的匹配是有影响的,url按照正则匹配,上面的匹配到了,下面的就不会被匹配了。

 默认url

urlpatterns = [
url(r'index2/$', views.index2),
url(r'^$', views.index),
]

当匹配不到任何url的时候,将执行默认url。默认路由一般放在url末尾。

动态url

动态url传参

当我们想查找一年内每个月份的文章时,每点击一个url就需要写一个url匹配,这样显然是不合理的,所以我们可以通过动态url匹配,通过正则来实现。可以将参数传给后端函数处理。

urlpatterns = [
url(r'^articles/([0-9]{4})/$', views.year_archive), #接收一个参数
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), #接收多个参数
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]

对于url(r'^articles/([0-9]{4})/$', views.year_archive) 这条匹配规则,views.year_archive函数必须为 ([0-9]{4}) 有一个接收参数,否则将提示:

aaarticlea/png;base64,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" alt="" />

动态url传入关键字参数

我的参数过多的时候,按照顺序传入就会显得很麻烦,这时候我们可以按照key:value形式传入参数

import views

urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
]

当我们请求/articles/2005/03/ 将会调用后端函数传入year和month参数 views.month_archive(request, year='2005',month='03'),假设我们将在函数定义中把year和month写成y和m,

将会出现错误。

aaarticlea/png;base64,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" alt="" />

url转发

大部分情况下,我们不会把所有的url写在全局url配置中,这样会容易引发很多问题,比如:

新增加的url规则可能包含旧的url,导致旧的匹配不到,

添加错误的url导致站点出现问题

app代码间的松耦合问题

...

所以我们应该使用以下方式解决问题:

在全局urls.py中添加,二层路由

from django.conf.urls import url,include
from app01 import urls as payment_urls urlpatterns = [
url(r'^payment/', include(payment_urls)),
]

在app中添加urls.py文件

from django.conf.urls import url,include
from app01 import views
urlpatterns = [
url(r'cash/$', views.pay_by_cash),
url(r'^$', views.index),
]

接下里可以通过 http://hostip:port/payment/ 或 http://hostip:port/payment/cash/ 访问

注意:django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对一个的view中的函数去处理。其他大部分的Web框架则是对一类的url请求做一条路由映射,从而使路由系统变得简洁。

django templates

django的模板给我们提供了丰富的替换规则,假设我们自己去定义一个替换规则如下:

def current_datetime(request):
now = datetime.datetime.now()
html = "<html><body>It is now %s.</body></html>" % now
return HttpResponse(html)

当内容足够多的时候,就没法玩了。当然我们可以写入文件,然后通过django的模板语言渲染html。

Django 模版基本语法

>>> from django.template import Context,Template
>>> t = Template("my name is {{name}}.") #针对变量
>>> c = Context({"name":"koka"})
>>> t.render(c)
'my name is koka.' >>> from django.template import Template,Context
>>> person = {"name":"koka","age":""} #针对字典
>>> t = Template("{{ person.name }} is {{ person.age }} year old.")
>>> c = Context({"person":person})
>>> t.render(c)
'koka is 24 year old.' >>> t = Template("Item 2 is {{ items.2 }}.") #针对列表
>>> c = Context({'items':["apples","bananas","carrots"]})
>>> t.render(c)
'Item 2 is carrots.'

无论何时我们都可以像这样使用同一模板源渲染多个context,只进行 一次模板创建然后多次调用render()方法渲染会更为高效:

注意:

Django 模板解析非常快捷。 大部分的解析工作都是在后台通过对简短正则表达式一次性调用来完成。 这和基于 XML 的模板引擎形成鲜明对比,那些引擎承担了 XML 解析器的开销,且往往比 Django 模板渲染引擎要慢上几个数量级。我们来对比一下两种方式:

# Bad
for name in ('John', 'Julie', 'Pat'):
t = Template('Hello, {{ name }}') #建立多次模板
print t.render(Context({'name': name})) # Good
t = Template('Hello, {{ name }}')
for name in ('John', 'Julie', 'Pat'):
print t.render(Context({'name': name}))

模板中的for和if语句,django模板语言是没有while循环的,假设写一个死循环一直获取不到数据,将是一件悲剧的事。

for: {% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}

if: {% if ordered_warranty %}  {% else %} {% endif %}

#templates中定义index.html模板文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.header li{
display: inline-block;
}
</style>
</head>
<body>
<div class="header">
<ul>
<li>home</li>
<li>page1</li>
<li>page2</li>
<li>page3</li>
</ul>
</div>
<h1>Welcome to test center</h1><ul>
{% for item in user_obj %}
{% if item.username == "koka" %}
<li style="background-color: red;">username:{{ item.username }} age:{{ item.age }}</li>
{% else %}
<li style="">username:{{ item.username }} age:{{ item.age }}</li>
{% endif %}
{% endfor %}
</ul><footer> Power by koka</footer>
</body>
</html>

#view

from django.shortcuts import render,HttpResponse

# Create your views here.
def index(request):
user_obj = [
{"username":"koka", "age":"24"},
{"username":"ajax", "age":"24"},
{"username":"django","age":"24"}
]
return render(request, 'app01/index.html', {'user_obj': user_obj}) #将数据插入模板文件

其他方法:

  • forloop.counter
  • forloop.first
  • forloop.last
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>Welcome to test center</h1>
<ul>
{% for item in user_obj %}
{% if forloop.counter > 2 %}
<li style="background-color: red;">username:{{ item.username }} age:{{ item.age }}</li>
{% else %}
<li style="">username:{{ item.username }} age:{{ item.age }}</li>
{% endif %}
{% endfor %}
</ul>
</body>
</html>

效果如下:

aaarticlea/png;base64,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" alt="" />

divisibleby 取模

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>Welcome to test center</h1>
<ul>
{% for item in user_obj %}
{% if forloop.counter|divisibleby:"2" %}
<li style="background-color: red;">username:{{ item.username }} age:{{ item.age }}</li>
{% else %}
<li style="">username:{{ item.username }} age:{{ item.age }}</li>
{% endif %}
{% endfor %}
</ul>
</body>
</html>

效果如下:

aaarticlea/png;base64,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" alt="" />

django母板与子板

母板:{% block title %}{% endblock %} 定义子板可以修改的范围

子板:{% extends "base.html" %} 继承母板

   {% block title %}{% endblock %} 重写母板中定义可以修改的范围

继承与重写

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.header li{
display: inline-block;
}
</style>
</head>
<body>
<div class="header">
<ul>
<li>home</li>
<li>page1</li>
<li>page2</li>
<li>page3</li>
</ul>
</div>
<h1>Welcome to test center</h1>
{% block tab %}
<ul>
{% for item in user_obj %}
{% if item.username == "koka" %}
<li style="background-color: red;">username:{{ item.username }} age:{{ item.age }}</li>
{% else %}
<li style="">username:{{ item.username }} age:{{ item.age }}</li>
{% endif %}
{% endfor %}
</ul>
{% endblock %}
<footer> Power by koka</footer>
</body>
</html>

母板

{% extends 'app01/index.html' %}

{% block tab %}
<h1>this is my page</h1>
<form style="color: aqua" action="#" method="post">
UserName:<input name="username" type="text">
Password:<input name="pwd" type="password">
</form>
{% endblock %}

子板

多重继承

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.header li{
display: inline-block;
}
</style>
</head>
<body>
<div class="header">
<ul>
<li>home</li>
<li>page1</li>
<li>page2</li>
<li>page3</li>
</ul>
</div>
<h1>Welcome to test center</h1>
{% block tab %}
<ul>
{% for item in user_obj %}
{% if item.username == "koka" %}
<li style="background-color: red;">username:{{ item.username }} age:{{ item.age }}</li>
{% else %}
<li style="">username:{{ item.username }} age:{{ item.age }}</li>
{% endif %}
{% endfor %}
</ul>
{% endblock %}
<footer> Power by koka</footer>
</body>
</html>

母板 index

{% extends 'app01/index.html' %}

{% block tab %}
<h1>this is sub page</h1>
{% block f-content %}
{% include 'app01/register_form.html' %}
{% endblock %}
{% endblock %}
{% extends "app01/page1.html" %}
{% block f-content %}
<h1>this is sub-sub-page</h1>
{% endblock %}

include

在讲解了模板加载机制之后,我们再介绍一个利用该机制的内建模板标签: {% include %} 。该标签允许在(模板中)包含其它的模板的内容。 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串。 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 {% include %} 来减少重复。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form style="color: aqua" action="#" method="post">
UserName:<input name="username" type="text">
Password:<input name="pwd" type="password">
</form>
</body>
</html>

form_register

{% extends 'app01/index.html' %}

{% include 'app01/register_form.html' %}

  django admin

django amdin是django提供的一个后台管理页面,改管理页面提供完善的html和css,使得你在通过Model创建完数据库表之后,就可以对数据进行增删改查,而使用django admin 则需要以下步骤:

1.注册app

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]

2.数据库配置

DATABASES = {
'default': {
#sqlite配置如下
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# mysql配置如下
# 'ENGINE': 'django.db.backends.mysql',
# 'NAME': 's12day16',
# 'HOST': '',
# 'PORT': '',
# 'USER': 'root',
# 'PASSWORD': '',
}
}

3.models配置

from django.db import models

# Create your models here.

class Publisher(models.Model):
name = models.CharField(max_length=32)
address = models.CharField(max_length=64,unique=True)
city = models.CharField(max_length=64)
state_province = models.CharField(max_length=32)
country = models.CharField(max_length=32)
website = models.URLField()
def __unicode__(self):
return "%s" % self.name
def __str__(self):
return "%s" % self.name
class Author(models.Model):
first_name = models.CharField(max_length=32)
last_name = models.CharField(max_length=32)
email = models.EmailField()
def __unicode__(self):
return "%s %s" %(self.first_name,self.last_name)
def __str__(self):
return "%s %s" %(self.first_name,self.last_name)
class Book(models.Model):
title = models.CharField(max_length=64)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
def __unicode__(self):
return "%s" % self.title
def __str__(self):
return "%s" % self.title

models

4.创建数据库

终端下执行下面两条命令:

python manage.py makemigrations 生成数据库配置文件

python manage.py migrate 创建数据库

5.配置admin

from django.contrib import admin

# Register your models here.
from app01 import models admin.site.register(models.Author)
admin.site.register(models.Book)
admin.site.register(models.Publisher)

批量注册

from django.contrib import admin

# Register your models here.
from django.apps import apps
from django.contrib.admin.sites import AlreadyRegistered app_models = apps.get_app_config("crm").get_models() # 获取app:crm下所有的model,返回一个生成器
# 遍历注册model
for model in app_models:
try:
admin.site.register(model)
except AlreadyRegistered:
pass

6.创建超级管理员

pyhton manage.py createsuperuser

7.登录admin管理后台

http://hostip:port/admin

aaarticlea/png;base64,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" alt="" width="437" height="267" />

设置字段可选

在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的。 举个例子,我们想要Author模块中的email字段成为可选,即允许不填。 在现实世界中,你可能没有为每个作者登记邮箱地址。

为了指定email字段为可选,你只要编辑Book模块(回想第五章,它在mysite/books/models.py文件里),在email字段上加上blank=True。代码如下:

class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(**blank=True** )

设置日期型和数字型字段可选

在SQL中, NULL的值不同于空字符串,就像Python中None不同于空字符串("")一样。这意味着某个字符型字段(如VARCHAR)的值不可能同时包含NULL和空字符串。

如果你想允许一个日期型(DateFieldTimeFieldDateTimeField)或数字型(IntegerFieldDecimalFieldFloatField)字段为空,你需要使用null=True * 和* blank=True

class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField(**blank=True, null=True** )

修改了表结构,需要重新同步数据库。

自定义字段标签

在编辑页面中,每个字段的标签都是从模块的字段名称生成的。 规则很简单: 用空格替换下划线;首字母大写。例如:Book模块中publication_date的标签是Publication date。

然而,字段名称并不总是贴切的。有些情况下,你可能想自定义一个标签。 你只需在模块中指定verbose_name

class Author(models.Model):
first_name = models.CharField(max_length=30,verbose_name='名')
last_name = models.CharField(max_length=40,verbose_name='姓')
email = models.EmailField(blank=True, **verbose_name='邮箱'** )

自定义ModelAdmin类

自定义列表

自定义显示字段否则将是tableobj

class Author(models.Model):
first_name = models.CharField(max_length=32)
last_name = models.CharField(max_length=32)
email = models.EmailField()
def __unicode__(self):
#1.9以前
return "%s %s" %(self.first_name,self.last_name)
def __str__(self):
#1.9以后
return "%s %s" %(self.first_name,self.last_name)

我们可以在这基础上改进,添加其它字段,从而改变列表的显示。

这个页面应该提供便利,比如说:在这个列表中可以看到作者的邮箱地址。如果能按照姓氏或名字来排序,那就更好了。

from django.contrib import admin

# Register your models here.
from app01 import models class AuthorAdmin(admin.ModelAdmin):
//
我们新建了一个类AuthorAdmin,它是从django.contrib.admin.ModelAdmin派生出来的子类,保存着一个类的自定义配置,以供管理工具使用。
我们只自定义了一项:list_display, 它是一个字段名称的元组,用于列表显示。 当然,这些字段名称必须是模块中有的。
//
list_display = ('first_name', 'last_name', 'email') admin.site.register(models.Author,AuthorAdmin) //用AuthorAdmin选项注册Author模块。admin.site.register()函数接受一个ModelAdmin子类作为第二个参数。
admin.site.register(models.Book)
admin.site.register(models.Publisher)

效果如下:

aaarticlea/png;base64,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" alt="" />

添加一个快速查询栏

class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
**search_fields = ('first_name', 'last_name')**

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAApEAAADNCAIAAABvmrw5AAAgAElEQVR4nO2d21dTd8Kw53/KTb2ZLtdyLmb14v3a9fp5M9Da9mUpzJI6Mk7zKbQiI1Kpgu9gB3GKjoiHaoRhKghxQAQn0CgwQUgwm3IO4RROG0OA7u9i57D3TsLJbMiW51nPRUl2fvllx+ZhH7L51f6TRYiIiJj8/mrXZ4CIiIibkWYjIiIaQ5qNiIhoDGk2IiKiMaTZiIiIxpBmIyIiGkOajYiIaAxpNiIiojGk2YiIiMaQZiMiIhpDmo2IiGgMaTYiIqIxpNmIiIjGkGYjIiIaQ5qNiIhoDGl2wrzUdETsOXVpt6eBiIjvqttu9lmnkCKqTPX1ZDit53JOaxeubksR287u+kvV2wQ1u8DWk+JtKtD5ITpbesorHLGV7vY0EBHfLd+q2c6HiltOXzRfO+NwHBZdX1iv7P4L23kNtJ19qelIAn+LSuxoiIgYz8Q1O2hh5bMjout4deHuv7YdlmYjIqKuJrzZRftPXmjuTBWf5x3a7de2w9JsRETUVT2aXXTo/glROGY9F/wxxmf6VwW1zzO8QqoopIjCJz7HF82VhYdUgx+xlRaduHna6TgcPFju+KL5ZqH2ia6ccXR+Li8g9hyzVRYeupQzIhyvVi5z6Vyz/agveND9M6/9dOVG+wA+LQ0PG3rIpRjLaOambnbwJeRUnurv+SS02InaK6GX3xaakuuos+aC4rVrDk5vZlVEHc8uPG9tO+oLrV5vZ1Zt6NDypaYj6rMQQm/iw+NiZ07O6cIfnmX4hBRRyGi+tPHaiDtarOPZOZWRlyC6jjqt504oV+nD42LPqUsnCyutX3hd8swPb+bNQkTcO+rS7P2nz/QLqeF7tc0+d9bpSvW2nSkpKNp/smj/VxdLao57hcPOh4WKwdMcTce9nad+uHLx0Mmi/V9d+KHp9z5NBkpPeYVU7/Ozl84V7T9Z9OnlPFtnWv+z415Fsw9dOzUipHrbzgSXKThf25Ymun5vjX961LGHx31CmrPm/ImvlA9R7e0/dO2UV0gdeZaX91XR/pNFx67k2TrTvI7P1M3+zPnsuNeeI7/MTwvONXceFl3HqwsLbI40Z03BsdNF+09fzKv80iuk9j8Kv/boZm+4KtQPCa1e+SWHVu8R27XI/GP8FvXwuOg6/qLtSP+jgmOnt7Y2YowW1exL1qOiEHrVJ4tOXDvj7En1deZcUk6gJ8vWljbSlJcXeUMPiw5j7LpARNwB9Wn2yQJbT0r/o4vyj5rP9G+sR0TH6Tz1Q0qefa4OXoroOHVJdQp6obUzVXyeF/rxYq09VbSfUW2rnS6wOVLFSLPPv+hJ8T07r95LX1jdtk4JLtgcKSPWC+obz79QdTTWzv/TBbaeFO1L6MxRvczTeQ5Xis/1maLQRftPFuVZj4o95hLFqlM3e8NVoXpIzuMM0fXldfXrutR0ROz8+pjyx+hmC6kjjzUvfDNrYxPNLjf7hM9f3FSv6sKzTleq11qgnIC3qUC1Vgu/7hc+cVRu758oIuK7po7NDn+sb+p458PjitaedQop/TXaZXIeZ0SieClnRPhMm4GTRYdqvgiPI++irz0X9VyFOSNbLIHq62qlp7zC5y/KtctE7RuP8RKq21JE14lKzfhy4a7EWHWbWhXqh3xjPSL2mNffNo3T7C9qo76nt/Ha2ESzf3j+iWiP/MYQ9sSj30fWRuwJFDZ3JtnX2BARd8/kbXaMwR8e3+gjXjXO9WefKTcuFV6wObZWAmWlDtV8EaO7sZod/RLinKd21imkhfZdx2j2BqtC8xD5kEFov31M4zRbdR7AJtdG7NFUzT7/whXZ6aLyimKxOBOobktR7FFARNzT7sK+8f0niw5dOWuzh0+SCruJZoeXeXg89takYpl1ruWy/mVevrl/yun4THN2VXj5eOeHv12zwwtvutmR1aU9B+3T0jNOxyei8InPcczRdOb65VjT2HSz118bsUdTNXudfyqKu9ZpNielIyKeLNq/K+egnXh43CeketvOlBRejBy83OR2dmiZY4+Oxf5i1ds2u7C67TNRSHPWnDefi7188jdb9tOCgusPT7+wHxGFVF9njvKI+KabvfHaiD0azUZE1MGd/65XzPPCttzsuNuFb7lvPObZUupyHHt0LPokr/3J1+zI23Hp3AtHqth2dqNz0KLW5ybWRuzRErtvnGYjIp4s2r8z11RRfaZfOeWNHLuNeOzRsa01O94VrRXLbOMctDgncF20dirKcfNLn+Lry2GTpNmHYp1Hpjw1T/uOxBhwK2sjkeeg0WxExPXciWuXqj/TzzoVu82DFp51urZ4PPvkhWZHik97tbXCWvsnb/VdL/kp1Nk78fC4T3UEN/hlJ+13vRypSdDsi7X21Oht7jzrUeW+gUtNR0THqW/iDriltRFrtG1+14tmIyKu5078jRB1sy9Wtx0WXces1+QrhFwseWju7zlqa/pii82WL2xyeKRJeWGTz0ccRzTLxLymSnPUhn7Qc2edrhSfPSe8fPWz3/scp2x2VTkOVWb5hMP9j8+pnrozIwmaLa+WNOejc3mqa6ooL1kj74E4ovq6WsxkbnJtRI+2+WuqnF53AjQbEVHhTvwtTu2+09MXFBcuPRy8FqbqO8qbavZ+9QVExZ4MR82FQ1HLqK9dejjmhUiVKq6HmiJfYjPndIxNSdXFROXLppae8iZBs/dHTstPiXNp2KL9Jwsrn2XIk3fej71ut7I2okbb4NqlkaHWeXNlaTYiYthtN3sL7ujfkNjK94wREREN5M40O23Hmn2pKc0of1wLERFxS+5Asy9aO1N8z87vxOs5XWDr2annQkRE3Fl1b3ZezXHt3+NKlKfPvmjLuX7l4qcni/YHTwQ7LLpOVEd/uQsREdH46tjs6rbg2UaO+4XaK6gkxHPnm9syvK5PQifBfT7y/Mw38S+yjYiIaGh34ng2IiIivr00GxER0RjSbERERGNIsxEREY0hzUZERDSGNBsREdEY0mxERERjSLMRERGNIc1GREQ0hjQbERHRGNJsREREY0izERERjSHNRkRENIY0GxER0Rj+ymyxISIiYvJLsxEREY0hzUZERDSGNBsREdEY0mxERERjSLMRERGNIc1GREQ0hjQbERHRGNJsREREY0izERERjSHNRkRENIY0GxER0RjSbERERGO4vWZPTEjSxIDilq65JWnJvgsv4NWrRUlanLq6rYcXvJyaWJYkSZKklYnh/gKLzWwZEIK3SEsTA1sbsHnwqdtT3bSFh1zuGGtxuHd8pSEioiE1eLPtvnlJkiR/Z/M2Hj44uCotTQxettguO+aWpLXR1y9Ddw0Iy1tttv1613iLe7yxs3eDJf893OIevmmxmWk2IiJuxcQ3+/vXczOrkiRJ0urKaH9vaPmV0YmlJXn71Tf+sH8x/N/fW2xm5Sbv6vLg642yF/KH8WVpcU54I82MvpJvqZlYWfLNjQaH8ru6Xgant7wo+FYkSZKktZnxgYLgnP2ddfJQLzsXJck3Fhp5682uel3T56nuGHraN1gq3/JkoNE9ZnkiL9BjcY03dvSY/z3c4h5vcY+3uMcsT2yXO8ZaugfudXvkW2qed8mjFTQP1LnGW9zjLX2hG58MNLpHarrGWtyj9x7bzHWva3rlR3nqOvoKdvufESIi7oCJbrbdNy+tTQy7L1te3n69uCStCF3B5ZcmBi9bXt4eXgpIkvRmrvaJraBtekaSRl/bzHVjo6vS0rS8gF+SFm11kcHz/j3c6HDHytLg4Ko0M/qqZmJFeuP7wWIzW2w1EyvS6lKn/T/muj6bb01ana8NTi80q/7FgLQ26LCZB5Ykxb4B+7wkzU+ERo7X7B5L75il0R69TvLaRlr6Bkur3D+6x2ue282WOM22RG1n9w3fqn9ptrz8rnOsxTX4ncVmrv+53u35sa37a4v9wrOh4CBPBhrdnh/bHNkWm9nSeat7/Gm3cKHKlv1YqOsbr3m2+/+SEBFRb7ff7CiW7Bbb7fFlaXmuJrjYq1eLUmB6VN7OFroij50ZlvdCh9L4elGS/K+aIwuMvlY+XdftnnFrR0+2ZhqO+YD8qK65JWnZZbeZ5WaH09s8PSM/r2rX/atXi9LSxMC2mm3Lbh5s7Bu+Wae5vfNW9/jTTpfZYr/pGH/a9Trbsulmh/eNPxlodA/ftNgu2EdbXAOXQyPf7hl/2ukK3xt5up7+kkcvo2eIiIjvqgnezlYlMxJCbbNDjw2lcWBJ03/V4BabuWmw0T16v151Y4tPkhanryrH0U4g9Fzqw+3BWW2r2WbLy1vd4y2O16obH/9c7/ZUN9vMFlu2nOSq7Tdbc5D7pmO8xeFWN9tm/serW12jje7xFvdYXUffhard/5eEiIh6m+Bmb3I7O1az1zmFretWt0e7nV03Pqrp/Op8rabZdVPBfe+qZocOXW/reHZ240D0dvbFF6Oho9RB69o6zdYBq17b2RG/rhd+7Buvtzt2/V8SIiLq7Y4dz1632XVjo6vSzGj/ZYvN/MRtGxj7XvF0MY9nXx32q04Xt/vmpbVBh/J49qumiRVpdbGlTnU8+6orfIr4Ns4b77nfOxp1PLu32qU8Xdx+vWu8pVvIs/TV9I3XtzuyLfa8pgGrO9TsZ0NP3SO3/mEzx2l2/OPZ4Wb3VrvG61+8+tpiy/6xr9pFsxER94R6nzcun9K8UbNVX5VeW5qfeqg9YKzxVeeiJPnGC7S3jNVMrEhvFsPnjQvyKehdc0vS8mj4vPGJMe3J6tJK8GRyi3ZiGxu9375psNE9eu+xreD5kNU93uIeb+z+2dIdanZVz/3e8Ra3p7o5TrO15407si2aZtuyrcKPvcFteqtDKGLfOCLiHvBduw6a5oB60F275AsiImLCpNmIiIjGkGYjIiIaw3et2YiIiO+qNBsREdEY0mxERERjSLMRERGNIc1GREQ0hjQbERHRGNJsREREY0izERERjSHNRkRENIY0GxER0Rj+SgIAAAAjQLMBAACMAc0GAAAwBjQbAADAGNBsAAAAY0CzAQAAjAHNBgAAMAY0GwAAwBjQbAAAAGNAswEAAIwBzQYAADAGNBsAAMAY0GwAAABjQLMBAACMAc0GAAAwBjQbAADAGNBsAAAAYxC32SvvvYeIiLg9d7JkeweajYiIiXcnS7Z3oNmIiJh4d7Jke4eNm72TswEAAENDO3SFZgMAQMKgHbpCswEAIGHQDl3ZjWZPNhUWNk0mflwAANhlaLauvEWzZ53WktzM9LS0tLS09MzcEqsgbu45PbXZ2bWeLU9VTcDjcHgCbznIZgZOyGzjMiu0C7MJH1XfOQMAxIVm68p2m+2x5qZnlViFWbluAXGo/ao5q6RjM9lOSFF0y5J2YH3711GSVtKR8FFpNgDsEjRbV7bZbGd5Zq5Vu30YaC023xna+DlpdgSaDQDvFDRbV7bZ7HipCQQie5VFobbYnB7cc17hiBReW5TJ9vLgPvZ0c7F1SLnDe7K9Ij8rNEZ5+2To8WkKYjcvMmhaurm4NrLfPkbPQq8m5sDy8ooXYy5uUj981hm6Ly09W3WIQH7sZHt5dnpaWtYdQfusCiJzij9cFKJgLcmO8SI3nHPkLuWKjayL4JTT0tKz8u841DMQhdri4HuSXdI0FOgo2ey7CQDvPjRbV7bZ7KE75sz1d4Q7K7KyCq2CGJAkKeBpLc7MLHcG71JVc7apMN1c3jEZkCQpMOu8k5ue3xTMu9hRkpVV0iofXA5Mqu5bf1NSbC02l7QHj0oHZp13ciNNXKfZMe/31GabS66WlAeH07wWSewoycwsrHXORl5AVoXilZrzCwvvOGfjpUv7y8+6w2nw1Oam5wbHDohDinltMGfhTm7+g9Cc5DtLOgLhCRUWX43MoKPcrFjrmieddd7Jzc3d3LsJAHsCmq0r2z4HzdNUmJWeXVLbEfNEsKE7ZrN6s9JRnlncLi+qqGKgvTi9uFXZ/llrbnAHe/QYntrs3NpJSTtIFMqt/eDSD8yhpbfR7DT1cYBZa244gNGTDHSUZIYOEUQ/Voum2esPp36RUatO6ihJv+rYeM7Rq6c9MouOkrTMcofyTkd5ZiS8zvJM9doLdJRkbubdBIC9Ac3Wlbf6rtfsUGtFvjk9LT0r/6pVuS05WZtrfqDuYqC1OLRzWFFFx9W0knb1oMKdrOLWgLyt+CD+MdmtHbJVLL2NZsdfXriTFT0L4U5W8FeLjSepbvYGw0U9sj3q1k3Mef1ZRC+nHMzzwKx9Uzb3bgLAHoFm60pCvp8dmBRay7PT03PvBI+oqg/Vao88Rz7lNQeQVcd2Nzg7a4McikLki2jqA8YJbXbsSYY3W7fa7A2GU7Lu0Bs2e7K9It+sXDubbHaMCW7u3QSAPQLN1pUEXlMlIFSYg7tV1++t6lM+7if6WzQ74LiamZ5bodhtr9d2tiGb7alVfU9P2sJ29kbNps8Aex2arSvbanb0AVGZ8FHj9fdrKz7b19nBu/1944HW4rTQsfPopWeb8mOcwb2H9o0Ld7K0x5g33WzhTpb2pLLNvZsAsEeg2bqyve1sZ7lZfZ6SJEmSJLYWpwU/0aPPpVKw7jloEWKegxbO+Do5nKzN1VR50pof2UUb9d1yT232dpsd64U6y5XnoG2p2RsMpyLmOWjBZq47Z8fVNPUh5oCjPHOTzZY6SrQn1TnK1zkHDQD2GjRbV7a5b1zsKMnKLm8VJsXgF4Ymhdar5vRIbwKOq5HvLEmBSWdtYW7oTlUEPLW56earoS8liUPt5dmhj/11v+sVaC9Oy46zHT50x5yZXzsUeerswnxz5LtOwh1zZnFr+GtQJfnFxeZIp7QDb7AvXfvlrNrCeN9qizvVkvZI5tYdTsO63/WKP+dAe3Gaubwj9LD2q9mFhbmhX7Y2arb2u161hdmZmZt6NwFgT0CzdWX7x7MDk+0V+dnh641n51e0T6r2Ryuv22HOr4hct2Oda6poL1uuuKZKlnIIeZj89LS0tPRYSYtcEyQzt6RpKCB1lKQpduoqLhlSXCuIntpsZafUA298DvZG11SJtwbltdRRnpWelpaWH/6rKdu8popy0Y1+z4hcFcWcf8cxK3lqs0O536jZUddUGdr8uwkA7z40W1f4W5zwdii++g4AQDt0hWbDWzFrzU3jG9gAEIJ26ArNhq3hcbaHTmOQrwob93g7AOxBaIeu0GzYGp72q5HTGMzFtU6uJw4AEWiHrtBsAABIGLRDV2g2AAAkDNqhKzQbAAASBu3QFZoNAAAJg3boCs0GAICEQTt0hWYDAEDCoB26QrMBACBh0A5dodkAAJAwaIeu0GwAAEgYtENXaDYAACQM2qErNBsAABIG7dAVmg0AAAmDdugKzQYAgIRBO3SFZgMAQMKgHbpCswEAIGHQDl2h2QAAkDBoh67QbAAASBi0Q1doNgAAJAzaoSs0GwAAEgbt0JXtNHsGAAAgFuF27PZE3k2202w/AABALMLt2O2JvJvQbAAASBg0W1doNgAAJAyarSs0GwAAEgbN1hWaDQAACYNm6wrNBgCAhEGzdSWJmv2if/lm6yoiKn3Rv6zT/3EAekCzdSVZmv2if/nLeytX6nxnb7lzrvf+4S8/Ie5lc673nr3l/u7x7Jf3VpTZnpmZcbvdTqfTnsQ4nU632z0zM6PHZwUkOTRbV5Kl2X9vWblS56uuru7r61tbW4s3K4A9wtramsvlqq6u/u7x7I1nAfl/k5mZmd7e3qmpqST/f2RtbW1yctLpdJLtPQjN1pUkavbZW+6+vj49P0kADIbL5cqrFMLNdrvdk5OTa2trv/zyyy+//LLbs4uNPDc524Ig6PFxAckMzdaVJGp2dnlPkm89AOwwa2trOdd7w83u7e1dWVkxSrNXVlZ6e3v1+LiAZIZm60oSNfv4/7br+UkCYEj+8Jefws222+2rq6tra2tJm+1wsNfW1lZXV+12ux4fF5DM0GxdodkASY2m2SsrK3K2f9kI/aa04VPLwV5ZWdnxZou+Kd/8Bsv4hK6+Kb0nMjs1teifH+gVfHo/U9JBs3VFr2Y3NDRkZWUdPHjw4MGDWVlZ9fX16y9PswFiErPZmq3t5CG8hR2r2d1VpTJV3dv8vNqQ7qrSisax9ZYYbrx9u3FADP/sqvvvnErLSILn8VNFWca/xuQnG07w2MkOzdYVXZqdn59/MIrz58+v8xCaDRATTbMDgYAm22qWhOo/f/ybfSaT6f2P/vB9+0SsZbbPRHWG6ULn+suEgx0IBGJsZ481VuxIs2PXe8B6Q3Xr8N3isgMxmj1mKS77tiv+84w0ZeT846f49web7fePNVbcsA5s5SUYHpqtK4lv9rVr1w4ePPjxxx83NDRMT09PT083NDR8/PHHBw8evHbtWrxH0WyAmGiavby8LGc7XG5lv2effLnvowvts/IPvRUZH33fuxPNVs5EnlsgEFheXt58s7urSiuqHt/7vrSi2ev3T/U+rigrLS0tq3jcK+9c9gnW22WlypuUA4X/O1jq8Ba9+qnmXz4offAysu/c8/zuf1f844y22WOW4rIDOWUHcoLd9bz8MeNM2YGcsk+uN/XMysGWF5Af6G39ofK/csoOnLl55nlwozrc7KjnfPeh2bqS4GYPDw/LW9Uul0t5u8vlkm8fHo69o4hmA8RE02y/3y9nO1xuJZ3fmEzfdCoLKori6urqqrftbxm/2Wcyvf/Rl/fcYvAud1Ve6vsmxY3eqox9eX+r+J/3TV8+8SkXSM17NLQqL2D6pupJXur7JtO+32RU9IjRc5Dntry8HJ6wivjNLq0I7rMea6worbAOiH5xwFohB6/vUVlZVZfP7xcHrBVlj/r86zfbH3s7u7dG/pVAZvHVt3++Wz/16tv1t7NHmjJyKu8Oin7/VGvF9f+qeDXvV21nTz2/e6D4yevF4JLyUJFm+73Neu5YSEJotq4kuNlVVVUHDx7Mz8+PvkveYV5VVRXzgTQbICaaZr958+bNmzd+v395eTkc7zALL4s+2pda1Nw3rbq5+9pHpvS7g4FAYNr2zQcfXOsOBAILtrP7PvjGNh0IBDw//mnfB9e6AwHPw3TTR/JtgcB0w5/2BX+Yfnkt9aO/96kXGLybbkq9O6iegDwrv98vz3Nr29nBxI41VoS3TMcaK0preuVmP/hpeD7OQJtrtvqpX9fczPjXmN+/QbMH/1X524pXwZtHmjJy/tHqj7dvPPIoRbM3cYz93YJm60qCm11ZWXnw4MHKysot3eWn2QBx0DRbFMWlpaVwuWWWFUw5/lnwxYfvm/b9Jr3gn46p5eXlZce1D0xnn87L978oMH1wzbGsYsySbvpTw9TymCXdVPAiOE7Dn0zplrHoBUMLqH+IXF1VntvS0pIoittqdmTHtnL3trfr8b0bZaWlN+497vJqB9p6s0eaMv5c1+n3b9hsZX0jCyubPf6fy8V/+21wbznNptn6stPb2S0tLTEfSLMBYqJp9sLCwuLiolxumTexme1/fjFl34cX7bNv7OdNas7b37x5M/uf2ydTfrMvdFv6g5E3Iw/S5fvevFH9dxjVjVFLhKckiuLi4uLCwsK2mj3ceCP+zuT5AWtF6e3Wqbds9k+3g4k9oG5teNFNb2dP1f+1LKN2YF79KJpNs3WC49kASY2m2XNzc/Pz83K55XgrGB8fV/3cnm8y5beL7d/u2/dtu3rRmZYz+z44UzckiqIoDt0/ajp6f0gcun/UlB9ccLzuj6aj94fUj1IuoP4hiDyrhYWF+fn5ubm5bTXbP2C9UfbgpzHR7/fPD3f3jfn9Uz/dK73XPCb6/eJY82252f7uqtIbjwXR75/qs1aUxmh21AnbvTXBhyqJu5195qXo92uPZ//2ekfoePbD1kW/3++1/KXs9PMpv1/0dNV9EmM7e6r1dmnVOqegv3PQbF3R8bzx+vp6+bzx+vp6+bzxmNvfMjQbICaaZvt8vtnZWbncMgsKOko/PFreMTi9sLCwsOB5lv/hvj/WehYWOko//OBM7aB8a0fbq+mFBU/tH02HyjvkW24d3Wc6+sPgwuAPR035bcGxPLV/3Pdh/jPPwsKCp6005cPSjgX1AqofFuROy8zNzc3Ozvp8vu012+/3dtVUyGeJ33jQOuz3R84kj9zi90+9rLpRWlpaeqOm66cqbbPne2u+Ly0trVFePDXmOdwxm+0fbL7725yyjH95/dHnjfv9fv/YP/9SdiCn0jLun3pV/z9nyg7k/O1kjf2vMbazu6ti/KLwLkOzdWXnvp8t09DQEPMhNBsgJppmT09Pz8zM+Hw+Od5yvxWMvrj79e8OvGcymd478Luv7zom5Zt/fvrdkQPvmUymX/+fY989/Xlubm7ScTfrwHsm03v/9//dfXo3y3Tk7s9zP989Yjr37/BYk467X//u1yaT6de/+/pH19zcnHoB9dKzIeS5zczMTE9PJ921S/sefX+71bvxcgnD9/LB94/6dvAJdx+arSs6XgftxIkT8gZ3Tk5OQ0NDQ0PDOtmm2QAx0TR7cnJyampqampKjrcS3y6hmcb09LQ8w8nJyaRrtn++t+ZGVddObfb6uqsqqrr32OVLabau7Oj1xsPZjj4TjWYDxETTbK/XOzExMTExMTk5Ge538iDPSp6h1+tNvmb7/f6p3p+6d2ZT29vd2rWTG/XJAc3WlZ3+GyFytmk2wCbRNNvj8YyH8Hq94YQnA/J8wtPzeDxJ2WzQF5qtK0n0d734+9kAGtai/n72yMjIWAiPmvFdQjON8PRGRkb4+9l7EJqtK0nU7LO33C6XS88PQACD4XK58iqFcLMFQRAEYXh4eGRkZGRkZDSKsR0neg7y3IaHh+XZ6vFxAckMzdaVJGr2lTpfdXW1y+ViaxtgbW3N5XJVVVX9tX4u3OyZmZmenh5BEAYHB4eGhoaTkqGhocHBQbfb3dPTMzMzo8fHBSQzNFtXkqXZL/qXv7y38tf6uW0rBO8AAAEiSURBVD/f7v/6764TJXbEvexXN5x/vt1f2jD/5b2VF/2RK4POzMwIgtDb22tPYpxOpyAIBHtvQrN1JVma7ff7X/Qv33gWQESlymADJD80W1eSqNkAAGB0aLau0GwAAEgYNFtXaDYAACQMmq0rNBsAABIGzdYVmg0AAAmDZusKzQYAgIRBs3VlO82eAQAAiEW4Hbs9kXeT7TQbAAAgJrRDVzZuNiIi4lbdyZLtHWg2IiIm3p0s2d6BZiMiYuLdyZLtHeI2GwAAAJIKmg0AAGAMaDYAAIAxoNkAAADGgGYDAAAYA5oNAABgDGg2AACAMaDZAAAAxoBmAwAAGAOaDQAAYAxoNgAAgDGg2QAAAMaAZgMAABgDmg0AAGAMaDYAAIAx+P82eLnguBii6QAAAABJRU5ErkJggg==" alt="" />

过滤器

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',) admin.site.register(models.Book,BookAdmin)

`` 过滤器`` 同样适用于其它类型的字段,而不单是`` 日期型`` (请在`` 布尔型`` 和`` 外键`` 字段上试试)。当有两个以上值时,过滤器就会显示。

aaarticlea/png;base64,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" alt="" />

另外一种过滤日期的方式是使用date_hierarchy选项

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
date_hierarchy = 'publication_date'

请注意,date_hierarchy接受的是* 字符串* ,而不是元组。因为只能对一个日期型字段进行层次划分。

aaarticlea/png;base64,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" alt="" />

改变默认的排序方式

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
**ordering = ('-publication_date',)**

aaarticlea/png;base64,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" alt="" />

自定义编辑表单

自定义字段顺序

首先,我们先自定义字段顺序。 默认地,表单中的字段顺序是与模块中定义是一致的。 我们可以通过使用ModelAdmin子类中的fields选项来改变它:

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
**fields = ('title', 'authors', 'publisher', 'publication_date')**

完成之后,编辑表单将按照指定的顺序显示各字段。 它看起来自然多了——作者排在书名之后。 字段顺序当然是与数据条目录入顺序有关, 每个表单都不一样。

禁止编辑项

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
**fields = ('title', 'authors', 'publisher')** #不包含某一项即可

ctrl多选框

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
**filter_horizontal = ('authors',)**

 aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA/kAAAFdCAIAAADXNTqKAAAgAElEQVR4nO3d/XNc5X33cf1F/gX+EjxKp0xDaaejzBTyNK4NDkkwaps7SSHcUJiACRnTSYDS3vbEBBPAjB2IQZZXWlnCNWNDY2MbC8sr62GxJQe89w8rrfbh0uro8mr32uPXe97DyEdHZxfN7vfz2UuXVgMVAAAAAHlkoNd3AAAAAMCWoOsDAAAA+UTXBwAAAPKJrg8AAADkE10fAAAAyCe6PgAAAJBPdH0AAAAgn+j6AAAAQD7R9QEAAIB8outjXZaWls6cOTMxMVEAgC1gYmLizJkzN27c6M5Mm5krHxmd+GC01//bAHLKB6OFIycmpq/Nd2emZUTXR5ilpaWJiYkLFy4sLi4uAcAWsLi4eOHChYmJiaWlpa2eaTNz5Q9GC/sOj/7zweO794+QZMf954PH9x0e/WC0cHW+vNUzLTu6PsKcOXPmwoULvW4CAPLPhQsXzp49u9Uz7cjoxL7Doz2vAiRz70uHR4+cOLnVMy07uj7CFIvFcrnc6w4AIP+Uy+VisbjVM+34icLw76zok9xyhw8eHzlR2OqZlh1dH2EKhUKvCwCAO4VCYctzsVAo9LwBkLxD7MJMy46ujzC6PoCuoeuTzJPZZ9rY9Buvf/qLsek3tm766foIo+sD6Bq6Psk8mX2mPT/5rScKg89Pfmvrpp+ujzC6PoCuoeuTzJO6PvoAXR9A19D1SeZJXR99gK4PoGvo+iTzZPuZNnHlrWcn/v7Z4t89W/y7X4z91ROFwV+M/VX1n89O/P3Elbc6O/10fYTR9QF0DV2fZJ5sP9PePvf8E4XB9Xz73POdnX5Zuv4fH73rrrvuunff+c1c+I+Pbv5rkBC6PoCuoeuTzJPtZ9qpq0d/8z8PVX1y7K+fKAw+OfbXtSOnrv6xs9MvQ9c/v+/euzZf9nX9PkfX7wKzs7O9vgtAEuj6feTw676T5Ab22X791aq/cXNvqPe6fp+ztV3//ME9Q3sOnq/7IOJr+5Y///nPzz333IMPPjg0NPTggw8+//zz586d6/WdAnqJrp++//fwyZMXrt786utKpXLzq69PXrj65Dsne36vyDTtr65/ft+9d91177596/T46iuBR/+4stGnyqN/XD3n3nvrDq19bcOx6iWqpz76x0r9q4u1m6zdDrpElq7fgdbd/hLBz25p19/6FxIffPDBAw88UG35e/bsqX78wAMPfPjhh1t4q0DapND1X71UO/f6kcMju/eP7D588Urt45Td+vv5yujZWsu/PP9l7eOXj5/p/f8+mZ591fVXqv75hnX6UNevhNb1q59YO153dvPB2o8A1rk4ukyGrj+6d2ho6DabcRJdv+6KW9z1P/3002q5f+GFF+bm5paWlhYXF1999dVq3f/000+36oaBtOl513/1UqWycPGp6j+Pl1bqftJdf/LIQuXK6cnd+7f8fj797uRfvvq6UqkUP5vZc/DE7v0jP/7d6PtnPq9UKn/56uun3p3s9beCTM7sM+1/Su+9d/E3/1N6b+um3wZdv7mct5T69l2/6ZyG7l47IdT17f7pORt3/dG9Q3sOHtxbV40bi/Lo3qGhvaOrx1eoHgjv4VnntL1794S/dvVGGj5bT/iCtRNH9w7tOXi+8aTqxQ+uXLXxf63p2PmDe4b27t27dqj15lp47rnnhoaGvvWtb01PT1+5cuXNN9/84osvbty48cgjjwwNDT333HMbfM+BnNLjrt/SlV+9VLlyenLl+OlS9QorxXrl/Cp1X7V2sHLqeO1SZ081HTx88UqldOT09eZr7l//OocvXqmUXl274PUjhyePLKyedOnsZu7n5JGFyqlLpbXTwne7wcmLVyuVyq1blZ++Of6TQ2O/nzz3fw6N/2D/yNXFG5VK5eSFqz3vVWRqdmGmZad916/fTVO37ya26zec0PQKoK7c128HsqrfKzbs+tWmXNfo6w42fFjXr2snB7r+eqetXrD1azdYj1/vgk1dv/U6q/9Do3tXb7zuf7LpFUzD/3rw1UgD3/nOd6ovBnbu3PnDH/7we9/73unTp5eWlv71X/91aGjou9/9bvvvOZBXetz1j5cqa2W6zmoPvnR29ZxqYz57qlaL176w7uDaK4fQ0vvhi1dqPTtwu5NHFlouHuj6rRfPeD8njyysnrnu3W526S9fVb+H8zeWZxZvXL/5l18ePbV7/8iF2XKlUrlx86ue9yoyNfun6zftoamt7G/pun7zzWv7vWGjrl8ryuuU/dG9gbrbWvHb79Jp+OxqT68dbLjlhhbfTMMFN+z69T80WL2hxhX+1tcNzd+HEAsLC0N17Nq169KlS0tLS++++27t4OLiYrtLADkl4a5fq7+rJft4aW23z1o1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" alt="" />

ModelAdmin类还支持filter_vertical选项。 它像filter_horizontal那样工作,除了控件都是垂直排列,而不是水平排列的。

filter_horizontalfilter_vertical选项只能用在多对多字段 上, 而不能用于 ForeignKey字段。 默认地,管理工具使用`` 下拉框`` 来展现`` 外键`` 字段。

文本框

使用`` raw_id_fields`` 选项。它是一个包含外键字段名称的元组,它包含的字段将被展现成`` 文本框`` ,而不再是`` 下拉框`` 。

class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)
date_hierarchy = 'publication_date'
ordering = ('-publication_date',)
filter_horizontal = ('authors',)
**raw_id_fields = ('publisher',)**

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAA0CAIAAADdbnxPAAAFfUlEQVR4nO3dv2vyWgDG8f5PZ8rk1km4UMjgdLZCS6ZCBycneREyFTtnKpe3CC8EB6frJC9CpiB4uiSTXCThDiZDppw7HH/EmOjbmtbTnOcztcckJiV8OT1N8YoDAICUri59AgAAUAyBBgCQFAINACApBBoAQFIINACApBBoAABJIdAAAJJCoAEAJIVAA4+iyPM8xpjz/THGPM+LoujSP1SACiDQqouiiDEWhmGappc+lwqkaRqGIWMsjuNLnwvAuRBo1XmeF4bhpc+iYmEYep536bMAOBcCrTrGWD3mzllpms7n80ufBcC5EGjVOY5z6VP4FHW9LlAKAq26uoasrtcFSkGgVVfXkNX1ukApCLTq6hqy49f1+c94uCYhhJju0Q0MOzjYRex1uPvJA0INIdCqUyrQ0+n08fFR13Vd1ymlr6+vJ46ybSYh2jXt2n5SMNweuKvMsGho2dfrb01XBNreHelEkRFoFX1BoAPbyE8VOOfJarVaJR/ZEypVHOjfP66EH7+//IyqcXhd4/FYdLnX6/X7/bu7O13Xn5+fjx3FNbdRTHzb0MiNxfaHV5OuRkh7vOJnBDqXXbeo2gi0ij4a6MA2djdQdm5Rsmk+s65JxKA4UPFth0B/gSMz6H///qs2gV4ul5RSSqnv+2IkjuNer6fr+ng8Lj1KpsScc2Y1CelOkr3hwDYI0Z5cXl2g998egVbYWYHetDMYtTWidZ3iRB8P9B+/CXwORQI9HA4PWxzHsa7rvV6v9Cj7gd7ekNkZtGM2Nzd/buabk1usOLnltsiH2yPTqqgk0OK7huXuDW9u4sA2CGm1O7cNQrTr9mixfTE3g16Mu7SxnpCPF5vDttod41rb7cn5YiS2a1BzEmw3M9q00bTYeT8OBSkS6J8/f+q6PpvNcptRSjudTulRjgV6x3g5/P3xyIQ3Py9ez6NNt2jKjBm00iqeQZcGWutOVpwvbIMQOlgUBXoxoIQ8jALO2UuLEGO0fq315K44919aYqEvcc0maZpOIg72MFqJzZrm5u1xD7+LIoEWM+jpdJodFDPojwZ6PSym0GIROr/nxwO9qbNhGHsjuLnVUvEadGmg12ML+1a09zDQgW0QctMZuItk703Wezrro7lPGiGms3sDByshZ1Ek0MvlUtf1+/v77AN2/X7//DXozUa/jj50UTg13l+JNs1sncVLmfsagVZRNUschcNFgd6fguwvcSS+3WlphBBCGrcvLCk+Wn49zrADBPocigSac25ZlniKw7Ks19fX7fN2fxjoFRsUPcXBV65FCaGDf94VaNHfkkBndkGg1fbFgRYz6OJAC0nA7HaTkNbALw+06ZS9KbyXOoHmnA+HQ0qpvtHv98W3pY0+/Rw0IY2bB8sJjhWZnwp0UNRfBBqqDjR3TY1o3UnC+WKQXbtoms6JNWjX1EjzyeWcB6MHsVVRoBPXbK5XtHmycBwfgT6PUoEWZrPZbDYTax2+74tG55an3+/ksxkFgd4MZkcwg4adqgO9eRSjQbtP3dYu0A9dk4qnOAb+9oGkgyWO3VMctl+yxMF3T3GQxs1tdxJkNsMfCd9Pqf8kLCQafWyhowK5v/4VfsELlqrXfyQsaz3UHP7VW3UINIC0EGjV1TVkdb0uUAoCrbq6hqyu1wVKQaBVV9eQ1fW6QCkItOrq+pmEjOHf/uHbQ6BVh0/1BpAWAq26KIoYY2EY1mMenaZpGIbz+fzzPzMF4NMh0MDjOPY8jzHmfH9vb2+e56HOUA8INACApBBoAABJIdAAAJJCoAEAJIVAAwBICoEGAJAUAg0AICkEGgBAUgg0AICkjgX6PwAAuBzMoAEAJIVAAwBICoEGAJAUAg0AICkEGgBAUgg0AICk/gcAGeWk/6ZqYQAAAABJRU5ErkJggg==" alt="" />

更多django admin的内容请参考: http://docs.30c.org/djangobook2/chapter06/

django models

到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞:

  • 创建数据库,设计表结构和字段
  • 使用sqlapi 来连接数据库,并编写数据访问层代码
  • 业务逻辑层去调用数据访问层执行数据库操作

第一个模型

我们来假定下面的这些概念、字段和关系:

  • 一个作者有姓,有名及email地址。

  • 出版商有名称,地址,所在城市、省,国家,网站。

  • 书籍有书名和出版日期。 它有一个或多个作者(和作者是多对多的关联关系[many-to-many]), 只有一个出版商(和出版商是一对多的关联关系[one-to-many],也被称作外键[foreign key])

from django.db import models

# Create your models here.
class Publisher(models.Model):
#首先要注意的事是每个数据模型都是 django.db.models.Model 的子类。
#它的父类 Model 包含了所有必要的和数据库交互的方法,并提供了一个简洁漂亮的定义数据库字段的语法。
name = models.CharField(max_length=32)
address = models.CharField(max_length=64,unique=True)
city = models.CharField(max_length=64)
state_province = models.CharField(max_length=32)
country = models.CharField(max_length=32)
website = models.URLField()
def __unicode__(self):
return "%s" % self.name
def __str__(self):
return "%s" % self.name
class Author(models.Model):
#每个模型相当于单个数据库表,每个属性也是这个表中的一个字段。
first_name = models.CharField(max_length=32)
last_name = models.CharField(max_length=32)
email = models.EmailField(verbose_name="邮箱")
def __unicode__(self):
return "%s %s" %(self.first_name,self.last_name)
def __str__(self):
return "%s %s" %(self.first_name,self.last_name)
class Book(models.Model):
#“每个数据库表对应一个类”这条规则的例外情况是多对多关系。
# Book 有一个 多对多字段 叫做 authors 。 该字段表明一本书籍有一个或多个作者,但 Book 数据库表却并没有 authors 字段。
#相反,Django创建了一个额外的表(多对多连接表)来处理书籍和作者之间的映射关系。
title = models.CharField(max_length=64)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
def __unicode__(self):
return "%s" % self.title
def __str__(self):
return "%s" % self.title

Django会自动为每个模型生成一个自增长的整数主键字段每个Django模型都要求有单独的主键。id

剩下的步骤参考django admin生成数据库的操作。(注册,生成配置文件,创建数据库)

1、models.AutoField  自增列 = int(11)
  如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
2、models.CharField  字符串字段
  必须 max_length 参数
3、models.BooleanField  布尔类型=tinyint(1)
  不能为空,Blank=True
4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar
  继承CharField,所以必须 max_lenght 参数
5、models.DateField  日期类型 date
  对于参数,auto_now = True 则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。
6、models.DateTimeField  日期类型 datetime
  同DateField的参数
7、models.Decimal  十进制小数类型 = decimal
  必须指定整数位max_digits和小数位decimal_places
8、models.EmailField  字符串类型(正则表达式邮箱) =varchar
  对字符串进行正则表达式
9、models.FloatField  浮点类型 = double
10、models.IntegerField  整形
11、models.BigIntegerField  长整形
  integer_field_ranges = {
    'SmallIntegerField': (-32768, 32767),
    'IntegerField': (-2147483648, 2147483647),
    'BigIntegerField': (-9223372036854775808, 9223372036854775807),
    'PositiveSmallIntegerField': (0, 32767),
    'PositiveIntegerField': (0, 2147483647),
  }
12、models.IPAddressField  字符串类型(ip4正则表达式)
13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的)
  参数protocol可以是:both、ipv4、ipv6
  验证时,会根据设置报错
14、models.NullBooleanField  允许为空的布尔类型
15、models.PositiveIntegerFiel  正Integer
16、models.PositiveSmallIntegerField  正smallInteger
17、models.SlugField  减号、下划线、字母、数字
18、models.SmallIntegerField  数字
  数据库中的字段有:tinyint、smallint、int、bigint
19、models.TextField  字符串=longtext
20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]
21、models.URLField  字符串,地址正则表达式
22、models.BinaryField  二进制
23、models.ImageField 图片
24、models.FilePathField 文件

更多字段

1、null=True
  数据库中字段是否可以为空
2、blank=True
  django的 Admin 中添加数据时是否可允许空值
3、primary_key = False
  主键,对AutoField设置主键后,就会代替原来的自增 id 列
4、auto_now 和 auto_now_add
  auto_now 自动创建---无论添加或修改,都是当前操作的时间
  auto_now_add 自动创建---永远是创建时的时间
5、choices
GENDER_CHOICE = (
(u'M', u'Male'),
(u'F', u'Female'),
)
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
6、max_length
7、default  默认值
8、verbose_name  Admin中字段的显示名称
9、name|db_column  数据库中的字段名称
10、unique=True  不允许重复
11、db_index = True  数据库索引
12、editable=True  在Admin里是否可编辑
13、error_messages=None  错误提示
14、auto_created=False  自动创建
15、help_text  在Admin中提示帮助信息
16、validators=[]
17、upload-to

更多参数

参考地址:
https://docs.djangoproject.com/en/1.9/ref/models/fields/

数据库的基本操作

添加数据

python manage.py shell

方式一:

>>> p1 = models.Publisher(name="Apress",address="2855 Tele Aven",city="Bkl",state_province="CA",country='U.S.A.',website="http://apress.com/") 
#当你使用Django modle API创建对象时Django并未将对象保存至数据库内,除非你调用`` save()`` 方法:
>>> p1.save() #后台插入数据库
因为 Publisher 模型有一个自动增加的主键 id ,所以第一次调用 save() 还多做了一件事: 计算这个主键的值并把它赋值给这个对象实例:

方式二:

>>> models.Author.objects.create(first_name="lo",last_name="lo",email="lolo@qq.com")
<Author: lo lo>
>>> models.Author.objects.create(first_name="la",last_name="la",email="lala@qq.com")
<Author: la la>

插入和更新数据

>>> p2 = models.Publisher(name="wlgc",address="cnblog", city="BJ",state_province="BJ",country="CN",website="http://www.wlgc.com/")
>>> p2.save()
>>> p2.id
4
接下来再调用 save() 将不会创建新的记录,而只是修改记录内容(也就是 执行 UPDATE SQL语句,而不是 INSERT 语句):
>>> p2.address = 'WLGC'
>>> p2.save()

注意,并不是只更新修改过的那个字段,所有的字段都会被更新。 这个操作有可能引起竞态条件(表之间的关联冲突),这取决于你的应用程序。

查找数据

>>> models.Publisher.objects.all() #查找所有
[<Publisher: DB出版社>, <Publisher: dbrc出版社>, <Publisher: Apress>, <Publisher: wlgc>]    
>>> models.Publisher.objects.all().last()
<Publisher: wlgc> >>> models.Publisher.objects.all().first()
<Publisher: DB出版社>  

数据过滤

`` filter()`` 方法对数据进行过滤
>>> models.Publisher.objects.filter(name="Apress")
[<Publisher: Apress>] 你可以传递多个参数到 filter() 来缩小选取范围:
>>> models.Publisher.objects.filter(country="U.S.A.", state_province="CA")
[<Publisher: Apress>] 范围匹配id在1-3之间
>>> models.Publisher.objects.filter(id__range=[1,3])
[<Publisher: DB出版社>, <Publisher: dbrc出版社>]      

模糊匹配

>>> models.Publisher.objects.filter(name__contains="press")
[<Publisher: Apress>]
>>> models.Publisher.objects.filter(name__icontains="press")
[<Publisher: Apress>]
name 和 contains 之间有双下划线。和Python一样,Django也使用双下划线来表明会进行一些魔术般的操作。这里,contains部分会被Django翻译成LIKE语句,icontains不区分大小写:

获取单个对象

>>> models.Publisher.objects.get(name="Apress")
<Publisher: Apress>
这样,就返回了单个对象,而不是列表(更准确的说,QuerySet)

注意:使用get请求到一个列表或者空字段时将会报错

结果是多个对象,会导致抛出异常:
>>> Publisher.objects.get(country="U.S.A.")
Traceback (most recent call last):
...
MultipleObjectsReturned: get() returned more than one Publisher --
it returned 2! Lookup parameters were {'country': 'U.S.A.'} 查询没有返回结果也会抛出异常:
>>> Publisher.objects.get(name="Penguin")
Traceback (most recent call last):
...
DoesNotExist: Publisher matching query does not exist. 这个 DoesNotExist 异常 是 Publisher 这个 model 类的一个属性,即 Publisher.DoesNotExist。在你的应用中,你可以捕获并处理这个异常,像这样:
try:
p = Publisher.objects.get(name='Apress')
except Publisher.DoesNotExist:
print "Apress isn't in the database yet."
else:
print "Apress is in the database."

更新多个对象(update)

>>> models.Author.objects.filter(id=3).update(first_name="db")
1
>>> models.Publisher.objects.all().update(country='CN')
4
update()方法会返回一个整型数值,表示受影响的记录条数。

删除对象(delete)

>>> models.Publisher.objects.get(name="Apress").delete()
(1, {'app01.Publisher': 1})
>>> models.Publisher.objects.all().delete() #删除所有Publisher

关联查找

>>> b1 = models.Book.objects.get(id=2)
>>> b1.authors.select_related()
[<Author: sp chai>]

在测试环境操作models

import os
os.environ["DJANGO_SETTINGS_MODULE"] = 'projectname.settings' # 根据自己的工程名修改
import django
django.setup()
from app import models
"""
具体的model操作
"""