第六章 Django站点管理

gzstyxb 07-23 00:52

目录位置标题和这里内容处标题不一致

对标题的评论会显示在这里

对于某一类网站, 管理界面 是基础设施中非常重要的一部分。 这是以网页和有限的可信任管理者为基础的界面,它可以让你添加,编辑和删除网站内容。 一些常见的例子: 你可以用这个界面发布博客,后台的网站管理者用它来润色读者提交的内容,你的客户用你给他们建立的界面工具更新新闻并发布在网站上,这些都是使用管理界面的例子。

huangrui127 07-19 07:39

"润色" 怎么理解? 可以是删帖,河蟹么?

byrain 07-19 10:02

敏感词检索应该就是在这一步做的吧

wsss 03-20 10:19

楼上两位真是闲吃萝卜淡操心

chiedey 04-13 03:15

润色?!!!我扑通大笑不止,可不就是河蟹的意思吗!o(∩∩)o...哈哈

@monkey 05-21 08:44

找不到那个说后台界面没有css的在哪一块了,丢这里吧 单纯的编码问题 import sys reload(sys) sys.setdefaultencoding('gbk') 扔到配置文件setting.py里解决了 via.http://tieba.baidu.com/p/2692296390 #9楼 下面的方法我试过,反正没效果 ----------------------------------------------------- 我是ls的 lsss说的文章 http://blog.csdn.net/monkeyduck/article/details/19826421 文章引用的文章 http://blog.webforefront.com/archives/2011/02/python_ascii_co.html 我照着改了个gbk,but,改完过后那个自带的服务器都启动不了了,改回来才有正常了,不知道有人遇到一样的问题不

刘虎军 06-28 07:35

图挂了吧,换一下吧 http://www.djangobook.com/en/2.0/_images/login.png

lzb 02-11 06:04

看着评注我真是脑洞大开

Huskar 02-03 13:06

这就是CMS吗??

对这一段的评论会显示在这里

但是管理界面有一问题: 创建它太繁琐。 当你开发对公众的功能时,网页开发是有趣的,但是创建管理界面通常是千篇一律的。 你必须认证用户,显示并管理表格,验证输入的有效性诸如此类。 这很繁琐而且是重复劳动。

对这一段的评论会显示在这里

Django 在对这些繁琐和重复的工作进行了哪些改进? 它用不能再少的代码为你做了所有的一切。 Django 中创建管理界面已经不是问题。

meyu 04-01 07:54

它用不能再少的代码 ==》她用少得不能再少的代码

对这一段的评论会显示在这里

这一章是关于 Django 的自动管理界面。 这个特性是这样起作用的: 它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即工作。

gitfree 08-07 15:58

它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面

gitfree 08-07 15:59

它读取你模型中的元数据,然后提供给你一个强大而且可以使用的界面

tim 02-07 08:21

“它读取你模式中的元数据”,模式应该翻译成模型(model)好点

atlas 09-17 01:34

@tim 认同你的说法

对这一段的评论会显示在这里

请注意我们建议你读这章,即使你不打算用admin。因为我们将介绍一些概念,这些概念可以应用到Django的所有方面,而不仅仅是admin

对这一段的评论会显示在这里

django.contrib 包

对这一段的评论会显示在这里

Django自动管理工具是django.contrib的一部分。django.contrib是一套庞大的功能集,它是Django基本代码的组成部分,Django框架就是由众多包含附加组件(add-on)的基本代码构成的。 你可以把django.contrib看作是可选的Python标准库或普遍模式的实际实现。 它们与Django捆绑在一起,这样你在开发中就不用“重复发明轮子”了。

jianzhen 11-10 04:15

“重复发明轮子”

nowkaka 11-21 05:22

应该翻译成:不需要重复这些工作

Lynn 01-05 08:59

'重复发明轮子'并没有什么错误,这是个比喻,很多语言包括perl、python都用这个比喻来说明用已经开发好的包

匿名读者 07-09 09:07

专业造轮子 鄙视v2zh

xiaopanddxiong 08-08 08:01

不需要“重复造轮子”

匿名读者 12-05 09:04

轮子哥Vczh

电饭锅 02-06 13:46

鄙视调包侠,支持自造轮子(手动滑稽)

对这一段的评论会显示在这里

管理工具是本书讲述django.contrib的第一个部分。从技术层面上讲,它被称作django.contrib.admin。django.contrib中其它可用的特性,如用户鉴别系统(django.contrib.auth)、支持匿名会话(django.contrib.sessioins)以及用户评注系统(django.contrib.comments)。这些,我们将在第十六章详细讨论。在成为一个Django专家以前,你将会知道更多django.contrib的特性。 目前,你只需要知道Django自带很多优秀的附加组件,它们都存在于django.contrib包里。

Flyto 07-24 08:33

这个用户鉴别系统真的太好用了

^^ 09-15 13:42

你Y的都没有16章

Sammy 03-15 07:58

ls幽默,目录写错了吧^_^

andersc 06-25 05:08

django.contrib.sessioins -> django.contrib.sessions

sapjax 07-26 07:48

也没有第十二章

lazybios 10-14 12:43

ls 是写错了 部署就是12 具体可看英文版的

lincy 08-16 01:21

总共二十章,没少,只是章名写错了。楼上的看清楚再叫

gte 06-04 02:19

对这一段的评论会显示在这里

激活管理界面

tea 07-04 09:35

lincy 08-16 01:50

由于下面开始,翻译错误较多,建议阅读原文,以免绕晕:http://www.djangobook.com/en/2.0/chapter06.html

Xavier 07-19 07:29

给你们总结一下: 在django1.6中, 你只需要把第五章中在settings.py里注释掉的 INSTALLED_APPS 和 MIDDLEWARE_CLASSES 去掉注释即可。 然后运行python manage.py syncdb 会提示你创建用户 然后运行python manage.py runserver,打开http://127.0.0.1:8000/admin/ 即可看到

chao 11-06 09:20

在这里提醒下大家,待会你看到的admin界面可能没有显示books模块。 不要着急,再往后看会有解决办法。。 我觉得这两部分顺序有问题。

对这一段的评论会显示在这里

Django管理站点完全是可选择的,因为仅仅某些特殊类型的站点才需要这些功能。 这意味着你需要在你的项目中花费几个步骤去激活它。

对这一段的评论会显示在这里

第一步,对你的settings文件做如下这些改变:

kid 11-19 03:11

同志们,一定要仔细啊......

wqwqwq 07-10 09:21

wqwqwq

fgsdfgsdf 05-18 08:41

gsdfg

objectjava 05-27 04:56

django1.0配置 1.settings.py 添加django.contrib.admin到INSTALLED_APPS INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', ) 2.运行python manage.py syncdb生成管理需要的数据库表结构 3.编辑urls.py,添加urlpatterns from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', …… (r'^admin/(.*)', admin.site.root), ) 4.在需要管理的app下建立admin.py,将需要管理的模块添加 from mysite.books.models import * from django.contrib import admin admin.site.register(Publisher) admin.site.register(Author) admin.site.register(Book) **以上类均需添加__unicode__方法 class Publisher(models.Model): …… def __unicode__(self): return self.name 5.运行python manage.py runserver,访问localhost:8000/admin/ 使用刚刚创建的超级用户帐号即可进入管理界面 6.如果之前忘记创建超级用户,可以用python manage.py createsuperuser来创建

Tomoya 06-08 10:06

这里少了一步,需要在管理的model路径下添加一个admin.py,里面添加 from django.contrib import admin </br> from mysite.books.models import Book, Author, Publisher </br> admin.site.register(Book) </br> admin.site.register(Publisher) </br> admin.site.register(Author) </br>

Tomoya 06-08 10:07

这里少了一步,需要在管理的model路径下添加一个admin.py,里面添加 from django.contrib import admin from mysite.books.models import Book, Author, Publisher admin.site.register(Book) admin.site.register(Publisher) admin.site.register(Author)

匿名读者 06-21 01:42

我的是django 1.3 不用添加admin.py,把注释的内容恢复就行了

匿名读者 06-21 01:43

我的是django 1.3 没有添加admin.py,把注释的内容恢复就行了 不过进入管理页面以后 好像会少一些东西

soul_eater 09-01 06:35

我用的是Django 1.3, 少了Sites和Ch6, 怎么弄出来?

ambition 06-04 06:42

如果你找不到模块的是话,用 from books.models import Book, Author, Publisher ,不用mysit.|我的books的路径是mysit/books,和mysit/mysit同一级。 (我艹~好混乱 啊~)

stevenlee87 06-26 10:36

还是建议读英文原版:http://www.djangobook.com/en/2.0/chapter06.html 中文的比较老,坑比较多。

Xavier 07-19 07:10

感谢楼上们,看英文去了。。

御坂御坂 09-17 03:03

1.6,这里建议将INSTALLED_APPS,MIDDLEWARE_CLASSES的所有注释都去掉,去掉之后都是6个以django.开头的语句。 我按照英文版去掉了4个注释,后面运行时登录样式不对且报表缺失错误。

对这一段的评论会显示在这里
  1. 'django.contrib.admin'加入setting的INSTALLED_APPS配置中 (INSTALLED_APPS中的配置顺序是没有关系的, 但是我们喜欢保持一定顺序以方便人来阅读)
  2. 保证INSTALLED_APPS中包含'django.contrib.auth''django.contrib.contenttypes''django.contrib.sessions',Django的管理工具需要这3个包。 (如果你跟随本文制作mysite项目的话,那么请注意我们在第五章的时候把这三项INSTALLED_APPS条目注释了。现在,请把注释取消。)
  3. 确保MIDDLEWARE_CLASSES 包含'django.middleware.common.CommonMiddleware''django.contrib.sessions.middleware.SessionMiddleware''django.contrib.auth.middleware.AuthenticationMiddleware' 。(再次提醒,如果有跟着做mysite的话,请把在第五章做的注释取消。)
benson 03-25 03:22

第五章中好像没有提到 MIDDLEWARE_CLASSES 中的注释

ode2free 04-09 17:33

@benson, 提到了,注释掉了

soul_eater 09-01 06:29

用Django 1.3的时候,我把原来的注释的2个包放开,并且下一步的classes也放开后就进不了admin界面,最后按照本文中所写的内容放开就能进去了...

eason 12-27 02:12

版本:1.6,需要把 INSTALL_APPS中的django.contrib.staticfiles也要取消注释,否则admin的样式消失,加载不了css和js

张晓 05-14 00:24

还需要打开django.contrib.staticfiles,否则无法正常显示样式

zyongqing 06-02 11:34

Django 1.4后需启用django.contrib.staticfiles,否则无法找到css文件

Robin 07-08 11:32

django.contrib.staticfiles 是添加到INSTALLED_APP里的 1.51版本里默认添加了

十万个不为什么 09-28 08:42

Put 'django.contrib.admin' in your INSTALLED_APPS setting in order to use the admin application. 这说明在settings.py文件里面INSTALLED_APPS,django.contrib.admin也要取消注释。

lalala23456 10-10 12:40

请看最新版的英文版的

gangboy 06-12 01:32

英文版有多講到 'django.contrib.auth.middleware.AuthenticationMiddleware' 要取消註解

Valley 06-18 08:50

建议对照英文版来删掉注释,否则版本不同会导致很多错误。

对这一段的评论会显示在这里

运行 python manage.py syncdb 。这一步将生成管理界面使用的额外数据库表。 当你把'django.contrib.auth'加进INSTALLED_APPS后,第一次运行syncdb命令时, 系统会请你创建一个超级用户。 如果你不这么作,你需要运行python manage.py createsuperuser来另外创建一个admin的用户帐号,否则你将不能登入admin (提醒一句: 只有当INSTALLED_APPS包含'django.contrib.auth'时,python manage.py createsuperuser这个命令才可用.)

Ol 08-26 05:40

少了个第二步吧

william 03-31 03:52

这里我运行syncdb时出现了错误,提示No Module named adminmysite.books。很奇怪。不知道怎么产生的。如果我在INTALLED_APPS中注释掉mysite.books就ok了。放开又不行。

小鸟 09-29 06:58

python manage.py createsuperuse 使用此命令创建管理员账号时,到密码项,键盘输入任何键都无效。为什么??

llqbll 12-05 05:21

密码是不显示的,类unix都是这样

seraph 03-04 07:48

为什么我的无法创建超级用户,我选yes之后就开始报错呢

seraph 03-05 02:14

创建超级用户时,提示Illegal mix of collection(gbk_chinese_ci, implicit) and (utf8_general_ci,coercible) for operation '='

Paco 05-15 09:13

第三行“如果你不这么作”中的“作”应为“做”

huzzar 06-05 07:33

对照英文版发现这一段就是第二步。

Tangyi 07-02 07:06

这里要注意一下,需要运行两次syncdb,第一次运行时系统会提示创建一个超级用户,创建完成之后还要运行一次,创建django_admin_log表

buglor 07-31 11:02

我执行>manage.py syncdb命令后提示 OperationalError: (2013, "Lost connection to MySQL server at 'waiting for initial communication packet', system error: 0"),好惨 有人知道怎么解决吗?

lincy 08-16 01:48

楼上有病啊,刷你妹的屏。这个评注是用来提醒后来人的,你问问题有毛用,别人几个月后回复你,你能看得到?

wangfei 09-02 05:48

我的运行一次就输出: Creating tables ... Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s) 这不是代表成功了吗

jako 09-03 09:16

这里要运行两次python manage.py syncdb

yimiaodaren 10-13 06:18

我执行时直接报错说是语法问题DatabaseError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s AND `django_content_type`.`app_label` = %s )' at line 1")

如果你不这么作,你需要运行python manage.py createsuperuser 05-21 07:41

TaoBeier 06-21 13:59

恩,是的,当提示Creating tables ... Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s) 就说明成功了,我也是执行的第一次就成功了。 django 1.6.5 需要取消的注释行比以前版本的多,需要 MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) 才可以

匿名读者 07-18 06:59

提示什么Error的,退出终端后重试即可

adoo 12-21 06:02

这里创建个超级用户,居然需要你提供邮箱。。。

擦呢 05-14 00:25

密码不会显示的,照着键盘敲就可以了

zmrenwu 06-22 05:54

django1.8,python3.5,按照如果在命令行输入python manage.py syncdb,到输入email后报出attributeError错误,msvct has no attribute putwch.于是我只好进入shell栏,使用: from django.contrib.auth.models import User user=User.objects.create_superuser('name','emailname@demon.com','password') 创建了超级用户。

adam 01-09 11:15

syncdb新版本都不用了,现在是makemigrations,migrate,createsuperuser,输入python manage.py help可以看相关命令

bill 11-17 09:24

需要执行migrate,在执行createsuperuser,否则报.db.utils.OperationalError: no such table: auth_user

大隐 08-20 18:10

需要执行migrate,在执行createsuperuse ls上正解,另外就是密码不得低于8个字符,还有密码和邮箱里面不能有重复,比如你的邮箱是123123@qq.com那么你的密码就不能是abcd123123。

流沙 11-16 08:18

新版本的Django已经不是python manage.py syncdb了改为: 先执行python manage.py makemigrations再执行python manage.py migrate最后执行python manage.py createusperuser

ithee 12-23 11:29

楼上正解

匿名读者 05-05 12:38

楼上正解, 注意是createsuperuser而不是createusperuser

阿卓 10-19 11:06

总结,在Python3.X中,创建Django超级用户的流程: 1.进入项目文件夹下运行cmd界面,python manage.py makemigrations 2.python manage.py migrate 3.python manage.py createusperuser 4.正确输入要创建的用户名和密码

对这一段的评论会显示在这里

第三,将admin访问配置在URLconf(记住,在urls.py中). 默认情况下,命令django-admin.py startproject生成的文件urls.py是将Django admin的路径注释掉的,你所要做的就是取消注释。 请注意,以下内容是必须确保存在的:

youbuwei 11-19 15:34

ubuntu10.04&python2.6&django1.3.1与所述有所不同。被注释的内容是:#(r'^admin/doc/', include('django.contrib.admindocs.urls')), 执行后也有所不同,内容是documentation.

shuijing 04-20 05:32

where is the step 2?

gangboy 06-12 01:36

step 2是指「運行 python manage.py syncdb 。....」那段

QQasdhy 05-06 06:01

django1.6木有注释urls.py的admin

对这一段的评论会显示在这里
# Include these import statements...
from django.contrib import admin
admin.autodiscover()

# And include this URLpattern...
urlpatterns = patterns('',
    # ...
    (r'^admin/', include(admin.site.urls)),
    # ...
)
宁静致远 02-24 19:54

在django 1.2里面 会出现name 'patterns' is not defined的错误 要添加from django.conf.urls.defaults import * 在第一行

baiye123 12-08 06:21

读django开发的时候 进入后台管理例子时出现一下错误,原因是 在urls.py文件中没有添加admin 解决办法: 打开urls.py 在前面添加 from django.contrib import admin

maxomnis 02-27 16:05

显示Exception Value: name 'admin' is not defined 按照楼上的方法解决了

leejaen 02-27 07:17

1.4.5中是url(r'^admin/', include(admin.site.urls)),

kevinkelin 03-01 16:43

楼上方法正解

horizon 03-25 04:47

删注释的时候注意缩进啊。。。

匿名读者 07-29 23:48

忘记在burl.py中添加admin.autodiscover()打开admin网页时会出现错误: You don't have permission to edit anything

yinsp 09-24 05:26

include(admin.site.urls) 会报错没有这个属性 我的是用include(admin,site.root)

qiaoliang 10-18 13:12

为什么会出现SynTaxError

abuchi 01-13 16:22

urlpatterns = patterns('', (r'^admin/', include(admin.site.urls)), urlpatterns以下,只去上面那一个注释,去多了要报错。

learn 05-14 14:31

AdminSite' object has no attribute 'urls 楼上的朋友说的对,把urls换成root即可,如下: include(admin,site.root)

learn 05-14 15:25

如果这块有问题的话,可以把(r'^admin/$',include(admin.site.urls)) 换成(r'^admin/(.*)',admin.site.root),最好复制粘贴,不要手打。 答案来自于:http://stackoverflow.com/questions/946240/difference-between-admin-site-root-and-admin-site-urls

Rying 01-09 02:23

这里正则表达式不能以/结尾,输入locahost:8000/admin时候url被重定向了到了另一个url,所以不能使用$

匿名读者 01-12 02:59

(r'^admin/(.*)', admin.site.root)

aaron 05-06 09:25

环境是 win10 64 python 2.7.11 django 1.9 使用方法: from django.conf.urls import include,url,patterns from django.contrib import admin admin.autodiscover() url(r'^admin/', include(admin.site.urls)) 成功了

aaron 05-06 09:27

环境是 win10 64 python 2.7.11 django 1.9 使用方法: 第一行 开始from django.conf.urls import include,url,patterns 结束 第二行开始from django.contrib import admin 结束 第三行开始admin.autodiscover()结束 第四行开始url(r'^admin/', include(admin.site.urls)) 结束 成功了 评论不能换行略坑

一页书 05-13 12:39

此处如果报错DoesNotExist at /admin/login/ 应该到INSTALLED APPS里把django.contrib.sites注释掉即可解决

NameError: name 'include' is not defined 08-30 03:02

django 1.10 使用方法: 到目前为止,完整的urls.py文件如下 line1:from django.conf.urls import url, include line2:from django.contrib import admin line3:from mysite.views import hello, current_datetime, hours_ahead line4:admin.autodiscover() line5:urlpatterns = [ line6: url(r'^hello/$', hello), line7: url(r'^time/$', current_datetime), line8: url(r'^time/plus/(\d{1,2})/$', hours_ahead), line9: url(r'^admin/', include(admin.site.urls)), line10:]

hi 09-21 05:06

直接使用默认的就可以,我的是python2版本的django1.9,默认配置url中包含url(r'^admin/$', admin.site.urls),不清楚include是干什么的,我这样就可以了。

匿名读者 12-20 07:19

urlpatterns = [ url(r'^hello/$', hello), url(r'^time/$',current_datetime), # url(r'^time/plus/\d+/$',hours_ahead), 在URL上增加正则匹配时差数值 url(r'^time/plus/(\d{1,2})/$',hours_ahead), url(r'^admin/',admin.site.urls,name='admin'), #注意2.0必须在后边添加name ] #2.0必须添加app_name app_name = 'books'

AndrewYang 03-23 07:56

python3.6 django 2.0 楼上正解~

学习 04-02 02:32

为什么出现reverse logout这样的提示。出错

匿名读者 05-13 02:34

2.0 from django.contrib import admin url(r'^admin/',admin.site.urls,name='admin'),

对这一段的评论会显示在这里

当这一切都配置好后,现在你将发现Django管理工具可以运行了。 启动开发服务器(如前:python manage.py runserver ),然后在浏览器中访问:http://127.0.0.1:8000/admin/

kk 07-17 08:27

it doesn't work... "TemplateDoesNotExist at /admin/" and it seems the template do exist in "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/templates/admin/login.html"...

龙叁 07-28 13:31

python 2.6.6, django 1.4, apache 2 修改/etc/apache2/site-availiables/default,加上对static/admin/静态目录的路由解析: Alias /static/admin /usr/local/lib/python2.6/dist-packages/django/contrib/admin/static/admin <Directory "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/static/admin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> <Location "/static/admin/"> SetHandler None </Location> <LocationMatch "\.(jpg|gif|png|txt|ico|pdf|css|jpeg)$"> SetHandler None </LocationMatch>

iamted 08-21 08:13

遇到一个错误“'WSGIRequest' object has no attribute 'user'”,这是咋回事儿~

iamted 08-21 08:16

发现是因为注释掉MIDDLEWARE_CLASSES中的'django.contrib.auth.middleware.AuthenticationMiddleware'导致

Anson 10-21 15:05

配置好之后,显示 Exception Type: ValueError Exception Value:need more than 1 value to unpack 求解决办法,我用的是Django 1.4.1

seraph 03-04 07:49

DoesNotExist at /admin/ Site matching query does not exist.

zzm88 07-23 03:17

ValueError at /admin/ timestamp out of range for platform time_t 系统时间调回正常就好。。。

dagger 08-28 10:53

报错 NoReverseMatch at /admin/ Reverse for 'logout' with arguments '()' and keyword arguments '{}' not found. 不知道咋解决

200cc 10-28 00:58

运行命令后报以下的错误,请问这要怎么解决? AttributeError at /admin 'HttpResponse' object has no attribute 'rindex' Request Method: GET Request URL: http://127.0.0.1:8000/admin Django Version: 1.5.4 Exception Type: AttributeError Exception Value: 'HttpResponse' object has no attribute 'rindex' Exception Location: C:\Python33\lib\site-packages\django\core\urlresolvers.py in get_mod_func, line 142 Python Executable: C:\Python33\python.exe Python Version: 3.3.2 Python Path: ['D:\\pythonDemo\\djangoDemo\\mysite', 'C:\\WINDOWS\\system32\\python33.zip', 'C:\\Python33\\DLLs', 'C:\\Python33\\lib', 'C:\\Python33', 'C:\\Python33\\lib\\site-packages'] Server time: 星期一, 28 十月 2013 08:53:30 +0800

Harry 12-03 07:21

运行后报错,请问如何解决? OperationalError at /admin/ no such table: django_admin_log

Harry 12-03 07:53

执行到这一步时报错: AssertionError at / The session-based temporary message storage requires session middleware to be installed, and come before the message middleware in the MIDDLEWARE_CLASSES list. 原来要将 'django.contrib.sessions.middleware.SessionMiddleware' 放在 'django.contrib.messages.middleware.MessageMiddleware' 前面,否则会报错。

syyy 05-26 08:33

AttributeError at /admin 'list' object has no attribute 'resolve' 求助。。

匿名读者 07-18 06:37

__import__() argument 1 must be string, not instancemethod

匿名读者 07-18 06:37

TypeError at /admin/ __import__() argument 1 must be string, not instancemethod

Joseph Daniel 10-29 07:16

显示没有 admin目录的是因为你的 template_dir中没有django的template目录,你可以从你的python安装目录里面的django目录里拷贝一份template到你自己项目的template中就可以了。

anonymous 12-03 07:58

这里有些人可能会报错:django no such table: django_session 这是因为启动server的时候数据库还没有已经创建的管理员信息。执行python manage.py syncdb之后python manage.py runserver

qwe 01-19 08:23

Reverse for 'logout' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'admin/(.*)logout/$']咋解决

匿名读者 01-26 04:05

把django.contrib.mysite注释掉就能解决Admin的问题

匿名读者 03-10 08:41

自己定义了一个templates文件夹后,admin会在这个文件夹下找login.html,没有就会报错。解决办法是在TEMPLATES里加一项,建一个key:value = 'NAME':'admin'

kunnka wong 12-29 02:14

ProgrammingError: (1146, "Table 'mydb.django_session' doesn't exist")我运行了python manage.py migrate 也不行,这个session表还是没建

kunnka wong 12-29 02:22

直接去数据库drop database mydb 然后重新执行makemigrations migrate createsuperuser,去数据库一看发现session表就有了,真TM神奇

对这一段的评论会显示在这里

,使用管理工具。

pengyao 01-05 09:19

多个","号

Ivan 09-17 09:20

多了一个逗号~~ 这么久了都没有人来修正哦?

CopyStyle 12-17 09:01

逗号还在呢 = = 。。

对这一段的评论会显示在这里

管理界面的设计是针对非技术人员的,所以它应该是自我解释的。 尽管如此,这里简单介绍一下它的基本特性。

sofakeer 07-28 15:27

[Dynamic Language] Python Django: You don't have permission to edit anything 解决办法: http://www.cnblogs.com/abeen/archive/2010/09/12/1824427.html 找到urls.py,将 admin.autodiscover()的注释去掉后权限正常了。

对这一段的评论会显示在这里

你看到的第一件事是如图6-1所示的登录屏幕。

kid 10-28 04:11

要在/bin/mysite/books/下建立一个admin.py,否则在admin页面显示不出内容如下: from django.contrib import admin from mysite.books.models import Book, Author, Publisher admin.site.register(Book) admin.site.register(Publisher) admin.site.register(Author)

kid 10-28 04:12

上面的代码没有排版,大家自行处理一下~~~ :)

IIssNan 11-04 07:32

@kid 添加books模型在下一小节会介绍到,这里没有必要去添加。

阿泰 03-10 14:16

添加django.middleware.locale.LocaleMiddleware后在管理界面添加信息时,出现错误。

jingyong 11-15 05:26

可是不添加的话,确实无法显示,不知道是什么原因

Dunboa 01-02 08:46

楼上的都没注意到urls.py之中还要import一些东西之后admin才能正常显示的?仔细看看就看到了。。。

July75 01-30 07:55

在urls.py里加入admin.autodiscover(),这样就能够显示Auth:Groups、Users了。 不然按照本文的做法,再进入admin界面之后,我只能看到“You don't have permission to edit anything.”

匿名读者 07-20 09:29

先仔细看清上文代码吧

浮云比翼 06-10 13:11

这个地方有点权限问题,如果是Linux系统的话,可能会出现Template doesn't exist问题,用chmod给dist-packages里的django加上一个权限就可以访问了。

Rex.Ye 01-09 10:05

图挂了

tomy 02-18 04:13

没有人遇到 在1.4 版本里面的管理页面 没有CSS的问题?

Json 03-06 01:41

网站管理界面没有CSS怎么破?

toni 03-17 08:03

管理界面css无法载入,看了下chrome的报错,说是存在500错误,求高人解答

horizon 03-25 05:48

setting.py里的django.contrib.staticfiles 要取消注释

horizon 03-25 05:48

setting.py里的django.contrib.staticfiles 要取消注释 @Json

匿名读者 05-10 02:55

要看图请配合英文版看吧,英文版有图哦 给上地址http://www.djangobook.com/en/2.0/

yooke 05-11 03:07

谢谢楼上~ 英文版的有图

haoaina521 05-15 02:13

我也出现了css丢失的问题,通过取消setting.py里的django.contrib.staticfiles,这样的话是不是第五章注释掉的东西都取消注释,应该就没什么影响吧???

terry 05-16 02:36

setting.py里的django.contrib.staticfiles 要取消注释,不然应用不了css,就是白纸黑字。

talent 09-30 01:16

家里用的1.5.1,打死也弄不出Admin Site的资源文件;公司里用的1.5.4,照着教程一路过来就能顺利显示。

agon 10-20 08:40

https://github.com/jacobian/djangobook.com/blob/master/graphics/chapter06/login.png图挂了打上面

nowkaka 11-21 08:44

同意horizon的做法,比之前好看多了....

我信息落后了快十年,今天才开始学,真是心酸,希望能读到最后 02-01 09:42

monkey 02-24 07:25

@horizon 取消了staticfiles的注释还是没有css怎么回事?

monkey 02-24 08:06

会弄了,是编码方式的问题,参见下面链接 http://blog.csdn.net/monkeyduck

fengjianjian 05-05 17:14

没有css,可以找到Python2.7.6\Lib\site.py文件,修改479行encoding = "gbk" # Default value set by _PyUnicode_Init() 重启服务器去看看吧!这是楼上的博客里的

@monkey 05-21 08:02

你这网址提供的真有意思,打开是个主页,好歹提供一个具体的连接也好点啊,5页的博文哪里去找你说的问题解答,当然,我是在批评你

@monkey 05-21 08:11

我是ls的 lsss说的文章 http://blog.csdn.net/monkeyduck/article/details/19826421 文章引用的文章 http://blog.webforefront.com/archives/2011/02/python_ascii_co.html 我照着改了个gbk,but,改完过后那个自带的服务器都启动不了了,改回来才有正常了,不知道有人遇到一样的问题不

haobo 08-03 03:30

@@monkey,建议你尝试在mimetypes.py文件末尾添加如下: reload(sys) sys.setdefaultencoding(gbk)

abuchi 03-24 17:46

没有CSS是因为编码问题,在配置文件settings.py中加入; import sys reload(sys) sys.setdefaultencoding('gbk')

shfscut 11-20 15:14

test

匿名读者 12-27 03:32

图片都失效了

对这一段的评论会显示在这里

图 6-1. Django的登录截图

对这一段的评论会显示在这里

你要使用你原来设置的超级用户的用户名和密码。 如果无法登录,请运行python manage.py createsuperuser ,确保你已经创建了一个超级用户。

对这一段的评论会显示在这里

一旦登录了,你将看到管理页面。 这个页面列出了管理工具中可编辑的所有数据类型。 现在,由于我们还没有创建任何模块,所以这个列表只有寥寥数条类目: 它仅有两个默认的管理-编辑模块:用户组(Groups)和用户(Users)。

soul_eater 09-01 06:50

我无法看到Ch6的内容,是不是图片贴错了?我看下面几段的文字和图片不对啊?

soul_eater 09-01 07:46

加入admin.py就能看见了...

新铸 11-03 13:16

怎么加啊

snaker 11-20 08:26

django 1.3.1 版本,我是url(r'^admin/doc/', include('django.contrib.admindocs.urls')),这行去掉注释。然后,添加admi.py(注意里面的换行)文件,之后可以显示的。“Ch6”被“Books”代替了。

isnowfy 12-15 06:42

接着往后看就知道admin.py怎么加了

dongweiming 04-20 10:42

在项目下的urls.py 需要添加一行: admin.autodiscover() 否则出现: you don't have permission to edit anything

Q_Jacky 07-09 06:25

加入admin.py: from django.contrib import admin from models import Publisher,Author,Book admin.site.register(Publisher) admin.site.register(Author) admin.site.register(Book)

justink 01-15 06:39

必须在ulrs.py里把 from django.contrib import admin admin.autodiscover() 这两行uncomment掉,才不会出现 you don't have permission to edit anything并看到group那些

lincy 08-16 02:13

将#'django.contrib.sites'的注释去掉即可看到site部分

leemon 03-17 09:33

图好像挂了。

yahier 09-04 08:36

图破了呀

Bing 09-14 15:11

出现‘"sites framework" without having set the SITE_ID setting.’错误的,需要在setting中加上SITE_ID=1

Rying 01-09 02:27

去英文的看图::::::::http://www.djangobook.com/en/2.0/chapter06.html

kunnka wong 07-21 03:14

登录以后报错 "Table 'mydb.django_session' doesn't exist",所有的注释都去掉了,但是这个表还是没建起来

kunnka wong 07-21 03:31

drop database mydb,然后重新执行生成库表命令python manage.py migrate,看到返回Apply all migrations: admin, contenttypes, books, auth, sessions,重新创建超级用户python manage.py createsuperuser,然后登录发现可以了

pandatyut 02-13 03:12

想看图需要访问:http://djangobook.com/django-admin-site/

对这一段的评论会显示在这里

图 6-2。 Django admin的首页

walker 05-31 09:17

建议把挂掉的图补上,官网上都有。这里的链接还是1.0版的。

soulgeek 12-25 07:01

不知道为什么Chrome下面显示有问题,有css但是显示乱的 换到firefox就没有问题了

taotao 04-09 02:02

此处图片 http://www.djangobook.com/en/2.0/_images/admin_index.png

TaoBeier 06-21 14:07

补一张图 是我自己运行时候的http://moelove.qiniudn.com/Django-admin.png

对这一段的评论会显示在这里

在Django管理页面中,每一种数据类型都有一个 change list edit form 。前者显示数据库中所有的可用对象;后者可让你添加、更改和删除数据库中的某条记录。

jianzhen 11-10 05:58

有么?change list和edit form?我是从原版2.0看的图片,可也没有啊!

Lyrus 12-11 13:18

原版的图也挂了

虎头蔓 01-09 02:33

django1.7 这两个货在哪里。。。图图在哪里在哪里~!

对这一段的评论会显示在这里

其它语言

lazybios 10-14 12:51

次处图片网址http://www.djangobook.com/en/2.0/_images/login.png

walker 05-31 09:11

建议把挂掉的图补上,官网上都有。这里的链接还是1.0版的。

jasper 07-31 08:35

图片跟官网不一样可能是把比书中setting的INSTALLED_APPS和MIDDLEWARE_CLASSES中的多余的几项给注释掉的原因,去掉注释就ok了

匿名读者 12-20 06:24

为什么只显示 groups 和 users ,模型里的几个函数没显示啊

TTTsand 09-17 06:35

我的页面怎么那么丑,只有字....

对这一段的评论会显示在这里

如果你的母语不是英语,而你不想用它来配置你的浏览器,你可以做一个快速更改来观察Django管理工具是否被翻译成你想要的语言。 仅需添加‘django.middleware.locale.LocaleMiddleware’MIDDLEWARE_CLASSES 设置中,并确保它在’django.contrib.sessions.middleware.SessionMiddleware’ 之后 。 (见上)

liuwei 04-21 08:29

为什么添加了这句话还是不能把管理界面的英文翻译成中文啊?

yanxinyou 05-22 10:48

我也是

Black Glory 06-18 10:47

测试有效,如果没用请检查系统设置中的区域是否正确

血衫非弧 07-09 18:35

我的是有效的=。=

Kuner 09-19 16:02

没效果的别忘了重启服务器

Ken 09-29 08:59

貌似是看locale的

keer 10-07 16:06

可能是因为你们没有修改配置TIME_ZONE = 'Asia/Shanghai'吧

KennX 10-26 07:06

我也没变成中文

KennX 10-26 08:53

我搞定了。要清除浏览器缓存的,重新打开就行了。

wulfric 04-20 08:09

我发现在IE下可以中文,但是firefox下和chrome下不行,后来firefox下更改了options后就好了,把编码格式改成utf8,语言改成中文,OK;chrome下把语言栏的中文简体拖到最上面,解决。当然Settings里的时区和语言也是要改的

yz 05-30 15:12

把settings.py的LANGUAGE_CODE = 'zh-cn'改成这个就行了

jason 01-09 13:56

我晕啊,是不是每个人运行的环境不宜样啊?上面各位声称做出来的方法,我都试过,还是中文!!你们到底弄出来没啊!!

sammy 01-10 07:14

在setting.py里面把语言设置改为 LANGUAGE_CODE = 'zh-cn'显示就变成中文啦~!

小利子 01-10 12:17

在setting.py里面把语言设置改为 LANGUAGE_CODE = 'zh-cn'显示就变成中文啦~! 我在ubuntu10.04下

hujp 01-20 12:13

chrome浏览器确实要修改本身的language设定。

tao 03-26 00:54

记住刷新,修改chrome 的language。

terry 05-16 02:47

不需要添加那个什么local啥的,直接照上面说的,把time zone和language code 改了就行。

hsia 06-14 05:54

我和楼上也一样

lawlietwf 07-30 08:42

开始显示中文,更改'django.middleware.locale.LocaleMiddleware'后,显示成英文了。。后来发现跟chrome的语言设置有关。

jasper 07-31 09:05

IE和Firefox均成功变身!!!

lincy 08-16 02:26

什么都没改就成功了。python 2.7;django 1.5

十万个不为什么 09-28 08:55

居然是日语,这是什么情况??

Sam 10-10 07:09

牛逼爆了!!見到母語了!

skyler 12-20 06:32

直接修改 setting 里的language code 就可以啦

DemonKoo 12-22 04:47

不添加任何东西 把settings.py的LANGUAGE_CODE = 'zh-cn' 这个做法通过。(Python 2.7 Django 1.5 Chrome)

howard 01-08 08:45

python2.7 django1.3 chrome 我的改了language code=zh-cn就好了, (之前我之前一直被语言困扰,我用Notepad++, 后来发现在格式里面一定要设置utf-8,作用于所有页面),这里就只改一下

Cy 01-12 04:17

@DemonKoo 你的方法我也行,py27 django1.6 chrome

abuchi 01-13 16:17

py2.7.6 Django1.1.4 直接改成'zh-cn'搞定

TaoBeier 06-21 14:11

Linux 64 Django 1.6 配置 LANGUAGE_CODE = 'zh-cn' TIME_ZONE = 'Asia/Shanghai' 即可显示中文

匿名读者 07-02 01:44

在setting.py里面把语言设置改为 LANGUAGE_CODE = 'zh-cn'显示就变成中文啦~!

Xavier 07-19 07:36

楼上正解,不需重启,只要刷新下浏览器即可。

vector 09-09 09:25

为什么我的不行?浏览器是中文简体,时区和语言也设置正确的,django版本是1.59.

54coder 11-26 15:43

这里面感觉还是用locle比较好,便于国际化

mr.liu 08-04 09:35

添加后启动界面提示这,/usr/local/lib/python2.7/site-packages/Django-1.8.1-py2.7.egg/django/utils/translation/__init__.py:146: RemovedInDjango19Warning: The use of the language code 'zh-cn' is deprecated. Please use the 'zh-hans' translation instead.

dongkee 10-20 12:38

ls,不是提示了嘛,新版本不用“zh-cn”了,换作“zh-hans”代替了,改成这样就好了LANGUAGE_CODE = 'zh-hans'

michael 11-24 13:38

这段内容是译者新加的,有心!

stepone 08-26 08:12

仅仅修改LANGUAGE_CODE = 'zh-cn' 搞定

匿名读者 11-04 03:24

强大的 django

hzmfly 09-09 11:35

不是 zh-cn 是zh-hans。最新版本已测试

horizonshd 09-14 13:51

Django-1.11.3中,只需修改为 LANGUAGE_CODE = 'zh-hans' 即可.

猪头哥哥 12-06 07:13

1.11版本中需要改成 zh-hans

lyz 12-26 08:01

Django2.0 setting.py 中 LANGUAGE_CODE = 'zh_hans' LANGUAGE_CODE 是单独 在最下面

LANGUAGE_CODE = 'zh-Hans' 03-05 14:57

匿名读者 05-07 14:24

python3.6+django2.2,折腾了一阵,总算改成中文了。先把Django装成2.1.8版本:pip install django==2.1.8;再设置LANGUAGE_CODE = 'zh-hans';最后设置时区TIME_ZONE = 'Asia/Shanghai' 。大功告成!

wangShuang 08-08 02:14

使用Python3.7/Django 2.2.4 修改settings.py中的 LANGUAGE_CODE = 'zh-hans' 之前版本可能zh_Hans也是可以的,多试试!!!

milo 05-15 10:42

LANGUAGE_CODE = 'zh-Hans'

对这一段的评论会显示在这里

完成后,请刷新页面。 如果你设置的语言可用,一系列的链接文字将被显示成这种语言。这些文字包括页面顶端的Change password和Log out,页面中部的Groups和Users。 Django自带了多种语言的翻译。

对这一段的评论会显示在这里

关于Django更多的国际化特性,请参见第十九章。

对这一段的评论会显示在这里

点击Uers行中的Change链接,引导用户更改列表。

zack 07-15 14:03

这里是点击Books行的change连接

qcskky 12-26 13:21

贴错图片了,这里应该截的是users的图

ycl 05-01 15:49

为什么我做的例子,不能像图里这样 每条数据都显示,而且可以分类查询?

jhw 10-05 14:09

为什么我这出来的页上没有chang list 和edit form呢,而是在Recent Actions下面提示My Actions None available呢

roger 11-20 13:17

我根本就看不到图片。。

张斌 01-17 04:13

哦,我也是,图片看不到啊

athos 03-12 03:09

直接到原版去看图吧: http://www.djangobook.com/en/2.0/chapter06.html

xpy 04-05 03:47

求问,为什么我看到的页面没他的这么漂亮?我的就是纯文字,而且不好看

Jokinryou 04-22 13:53

管理页面丢失css的同学们,把INSTALLED_APPS下边的django.contrib.staticfiles反注释掉。 之前在某一章的时候我记得把那个注释掉了...

leon 09-18 01:47

楼上正解

cy 01-12 15:05

根据提示打开 \Python 2.x\lib\mimetypes.py def enum_types(mimedb): i = 0 while True: try: ctype = _winreg.EnumKey(mimedb, i) except EnvironmentError: break #try: #ctype = ctype.encode(default_encoding) # omit in 3.x! #except UnicodeEncodeError: #pass else: yield ctype i += 1

对这一段的评论会显示在这里

图 6-3. 典型的改变列表视图 (见上)

对这一段的评论会显示在这里

这个页面显示了数据库中所有的用户。你可以将它看作是一个漂亮的网页版查询:SELECT * FROM auth_user; 如果你一直跟着作练习,并且只添加了一个用户,你会在这个页面中看到一个用户。但是如果你添加了多个用户,你会发现页面中还有过滤器、排序和查询框。 过滤器在右边;排序功能可通过点击列头查看;查询框在页面顶部,它允许你通过用户名查询。

对这一段的评论会显示在这里

点击其中一个用户名,你会看见关于这个用户的编辑窗口。

qcskky 12-26 13:22

贴错图片了,这里应该截的是users的图

simpx 01-02 15:22

此时应该还无法管理自己的app。只能进行用户操作

topin27 08-04 02:10

图片好像不对,大家自行处理。

Ryan 10-24 05:32

配图错误

falcon_chen 01-16 08:55

配图弱爆了,牛头不对马嘴

andersc 06-25 05:31

还是按照文字来做吧,图片神马的不靠谱。

小利子 01-10 12:19

我连图片都看不到。

mihello 03-28 06:04

配错图,请中英对照阅读

lawlietwf 07-30 08:52

为什么每次图片我都看不到。。。其他网站大多正常

魏晓文 11-04 14:25

在用中文添加用户的时候错误了,应该是mysql没有设置支持中文的缘故。英文就可以添加

不香 11-21 08:47

有个问题,为什么我这里无法显示照片?

netseek 01-07 08:28

怎么现在图片都不显示了?

Rying 01-09 02:50

去英文的看图::::::::http://www.djangobook.com/en/2.0/chapter06.html

对这一段的评论会显示在这里

图 6-4. 典型的编辑表格 (见上)

对这一段的评论会显示在这里

这个页面允许你修改用户的属性,如姓名和权限。 (如果要更改用户密码,你必须点击密码字段下的change password form,而不是直接更改字段值中的哈西码。)另外需要注意的是,不同类型的字段会用不同的窗口控件显示。例如,日期/时间型用日历控件,布尔型用复选框,字符型用简单文本框显示。

lisa 11-28 03:48

我编辑一个用户的名字和姓氏,然后点击保存。有报错。后来发现,是添加了django.middleware.locale.LocaleMiddleware这个之后,界面是汉语的错误。注释掉这行就可以了。为什么中文不行呢?

qq_345421243 05-10 08:51

我用的Django1.5.1版本不会报错

erhuabushuo 05-17 10:37

我也不会

world000 07-05 06:13

如果在中文下在这里出现 column 'change_messsage' 类的错误(显然是数据库更新有问题),有可能是数据库字符集的问题哦,修改数据库设置即可,和 django 无关。

lcx 10-23 03:33

布尔型用复选框?应该是单选框吧

haobo 08-03 11:56

为什么我只要修改属性,不论英文中文都出现 column 'change_messsage' 类的错误?

对这一段的评论会显示在这里

你可以通过点击编辑页面下方的删除按钮来删除一条记录。 你会见到一个确认页面。有时候,它会显示有哪些关联的对象将会一并被删除。 (例如,如果你要删除一个出版社,它下面所有的图书也将被删除。)

对这一段的评论会显示在这里

你可以通过点击管理主页面中某个对象的Add来添加一条新记录。 一个空白记录的页面将被打开,等待你填充。

siahui 09-19 12:40

我增加一条记录,有 "Table 'mysql.django_admin_log' doesn't exist"的报错,请教是什么问题

对这一段的评论会显示在这里

你还能看到管理界面也控制着你输入的有效性。 你可以试试不填必需的栏目或者在时间栏里填错误的时间,你会发现当你要保存时会出现错误信息,如图6-5所示。

对这一段的评论会显示在这里

图6-5. 编辑表格显示错误信息 (见上)

对这一段的评论会显示在这里

当你编辑已有的对像时,你在窗口的右上角可以看到一个历史按钮。 通过管理界面做的每一个改变都留有记录,你可以按历史键来检查这个记录(见图6-6)。

qcsky 12-26 13:23

应该不是这个截图,截图错误

heliar 07-18 02:48

此处如果需要修改管理员email或者其他信息需要把setting.py中的Installed_APPS 的django.contrib.messages和Middleware_classed中的django.contrib.messages.middleware.MessageMiddleware注释去掉。

对这一段的评论会显示在这里

图6-6. Django 对像历史页面 (见上)

对这一段的评论会显示在这里

将你的Models加入到Admin管理中

zjb 01-10 09:33

郁闷 为什么不把这段内容放在上面 ... 我看上面截图都有对自定义models的管理 为啥我的没有 就一直找原因 也没接着往下看 ... 这还是在网上找到方法后 接着往下看 才发现这里也有说明

melzg 03-21 15:42

同意。段落安排上没有说明,对于急着知道为什么的人会是一种煎熬。至少前面应该提一笔,让人知道后面会说。

mr.liu 08-04 08:32

同楼上啊。

对这一段的评论会显示在这里

有一个关键步骤我们还没做。 让我们将自己的模块加入管理工具中,这样我们就能够通过这个漂亮的界面添加、修改和删除数据库中的对象了。 我们将继续第五章中的book 例子。在其中,我们定义了三个模块: PublisherAuthorBook

erhuabushuo 05-17 10:43

我也不会

加菲猫 02-10 02:41

这里应该是 from books.models import .... 不应该是 from mysites.books.models import ...

xyok 03-12 14:10

加是正解,python会在成子文件mysite中搜book.models,所以搜不到

TaoBeier 06-21 14:25

那个取决于你的app 文件夹在哪个位置

simon_song 05-07 12:41

admin.py在app目录下和models.py一块儿话。直接 from models import books,。。。 我的是1.8

kunnka wong 07-21 10:27

from django.contrib import admin from books.models import Publisher,Author,Book admin.site.register(Publisher) admin.site.register(Author) admin.site.register(Book) django 1.9 books跟mysite同一级目录,所以在admin.py下应该是这样

对这一段的评论会显示在这里

books 目录下(mysite/books ),创建一个文件:admin.py ,然后输入以下代码:

Roy 07-11 03:01

测试

对这一段的评论会显示在这里
from django.contrib import admin
from mysite.books.models import Publisher, Author, Book

admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)
qcsky 12-26 13:23

应该不是这个截图,截图错误

andy 04-16 00:16

for "from mysite.book.models. import Publisher, Author, Book" there is no mysite before book.models

TankyWoo 04-27 08:36

这里from mysite.books.models import Publisher, Author, Book改为 from books.models import Publisher, Author, Book,不然提示没有books.model

silent@bupt 09-21 14:10

this directory:'mysite' should be omitted.

peter 10-24 05:45

第二个import不需要mysite.

yxs_do 01-25 14:43

需不需要mysite,要看你的文件配置

athos 03-12 03:58

这一段加入之后,怎么刷新也不显示books的信息,最后重新启动服务就显示出来了,汗

张晓 04-19 09:53

应该是这样from books.models import Publisher,Author,Book,不加项目名

qq_345421243 05-10 09:04

该文件名必须是admin.py,否则的话它是不会加载Books模块的

francis 08-05 15:00

from mysite.books.models import Publisher, Author, Book 需要把mysite去掉才行。

Mocker 09-17 02:12

mysite.app.xxx这种写法不太友好, 如果mysite这个名字变了的话, 全部都要替换。 app.xxx这种写法比较友好

Ttoto 09-20 08:49

from mysite.books.models import Publisher, Author, Book 应改为 from books.models import Publisher, Author, Book

Michael 11-01 13:45

最新的django第二个import不需要mysite

Harry 12-03 08:17

这里from mysite.books.models import Publisher, Author, Book要改为 from books.models import Publisher, Author, Book,不然提示没有books.model

zbzcool 12-08 14:18

upstiar is right

skyler 12-20 07:02

直接app 名称,不要前面的路径

匿名读者 12-20 14:27

i think it should be "import models" because admin.py and models.py are in the same director or it will be in a mess

benxiang 12-20 14:29

-or "from models import Publisher,Author,Book"

cheer 02-11 02:22

为什么会出现“name 'site' is not defined”?

zzZ 03-26 06:22

我用 from site.app.models 或者 from app.models都提示找不到,用from models import反而找到了

Xavier 07-19 07:48

感谢3楼

yaya 03-30 14:03

我的层级目录下,admin跟models在books的下一层,同级,所以直接从models import就好。大家注意自己的目录层级关系。 from models import Publisher, Author, Book

diangdiang 02-10 08:15

不显示 Publisher, Author, Book模块的 有可能是没有在INSTALLED_APPS 添加"books"

匿名读者 05-08 12:55

3楼正解

安铺靓仔 12-05 08:45

from .models import ...即可,from books.models import ...也行,不过强迫症会受不了,因为会出现红线

对这一段的评论会显示在这里

这些代码通知管理工具为这些模块逐一提供界面。

对这一段的评论会显示在这里

完成后,打开页面 [http://127.0.0.1:8000/admin](http://127.0.0.1:8000/admin)/ ,你会看到一个Books区域,其中包含Authors、Books和Publishers。 (你可能需要先停止,然后再启动服务(runserver ),才能使其生效。)

大伟 04-06 10:32

完成后,需要重新python manage.py runserver

linyuxu 06-10 08:57

这一步之后我的django管理界面显示“You don't have permission to edit anything."这是为什么呢?

gh 04-16 10:09

dfagdfsgadg

paul 06-25 15:05

在项目下的urls.py 需要添加一行: admin.autodiscover() 否则出现: you don't have permission to edit anything --摘自前面的评注

paul 06-25 15:36

在项目下的urls.py 去掉admin.autodiscover()前面的注释,否则出现: you don't have permission to edit anything 而且这条语句一定要放在urlpatterns = patterns前面

jason 12-11 13:50

上面的代码中应该把 mysite.books.models 改为 books.models

K 07-13 20:30

楼上+1 不然会出现import error

zzm88 07-23 07:14

mysite.books.models 还是 books.models 视乎你的books文件夹放哪里。

dogxxgod 09-21 13:58

为什么生成的菜单名称都多加了一个s,变成‘Publishers','Bookss','Authors'了?

Lyrus 12-11 14:02

同ls,后面加s是什么意思

Lyrus 12-11 14:04

是表示一个模块组的意思? 进入里面显示的是没有s的 增加author 应该是表示的问题吧

leemon 03-17 09:39

如果是跟着教程做的话, 这里应该是books.models,因为在创建APP页面的时候是与mysite同级下面创建的

匿名读者 07-16 02:46

mysite.books.models会报错,修改为books.models即可

lzb 02-12 04:46

为什么我的管理页面没有CSS样式

每个字段后多出的s是怎么回事?? 02-26 08:12

比如: 书s 作者s 出版商s

QQasdhy 05-06 06:25

直接加book.models,然后我1.6木有重启,刷新页面直接显示了

mr.liu 08-04 09:16

提示这玩意,/usr/local/lib/python2.7/site-packages/Django-1.8.1-py2.7.egg/django/utils/translation/__init__.py:146: RemovedInDjango19Warning: The use of the language code 'zh-cn' is deprecated. Please use the 'zh-hans' translation instead.

猪头哥哥 12-06 07:27

这个admin真的很棒 就是不知道有哪些实际的场景可以用得到

对这一段的评论会显示在这里

现在你拥有一个功能完整的管理界面来管理这三个模块了。 很简单吧!

caord 10-21 15:17

现在你的三个模型拥有了完全实用的管理接口,这非常简单。

hktk_hrl 02-27 03:44

增加Publisher保存时出错 no such table: django_admin_log

whypro 07-19 09:35

同楼上,保存时出现: "Table 'books.django_admin_log' doesn't exist"

whypro 07-20 02:18

楼上问题解决,应该再次运行 python manage.py syncdb

bill 11-11 12:46

在添加出版社的时候,为什么不能使用中文呢,要想要中文该怎么弄?

JunJie 01-31 08:50

这不就是phpMyadmin的功能吗

njlz8888 03-24 12:29

我的可以使用中文,django1.5

chu888 06-06 02:57

对于admin界面的中文问题,可以参考http://blog.csdn.net/jiangnanandi/article/details/3574007

atlas 09-17 02:50

我使用中文出现Warning: Incorrect string value: '\xE9\x82\x93\xE4\xBA\x9A...' for column 'name' at row 1 是怎么回事?

十万个不为什么 09-28 10:35

这个东西跟phpmyadmin一样,就是这个东西应该是支持不同数据库的对吧?不只mysql

coco 03-23 05:56

1.6需要加这个函数进行注册admin.site.register()

help 05-12 14:54

没有删除第五章的内容啊,为何看不到,sqlite

help 05-12 14:55

额,看到了

jj 03-03 14:56

首页 › Books › Authors 增加 author Author object

Kazuhira 06-28 07:45

Incorrect string value: '\xE6\xA2\xB5\xE8\x92\x82...' for column 'object_repr' at row 1 这种错误是因为表格的编码不对,设置成UTF-8就可以了。参考:http://www.programgo.com/article/38654863685/

对这一段的评论会显示在这里

花点时间添加和修改记录,以填充数据库。 如果你跟着第五章的例子一起创建Publisher对象的话(并且没有删除),你会在列表中看到那些记录。

TTTsand 11-14 09:08

你们没有发现根本就没有上章的内容吗?

TTTsand 11-14 09:12

好丢人其实是有的

nemo 02-11 17:04

LS有点可爱

xiaopanddxiong 08-08 08:48

逗死了

对这一段的评论会显示在这里

这里需要提到的一个特性是,管理工具处理外键和多对多关系(这两种关系可以在Book 模块中找到)的方法。 作为提醒,这里有个Book 模块的例子:

对这一段的评论会显示在这里
class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

    def __unicode__(self):
        return self.title
imlyj 07-27 10:29

def __unicode__(self): return self.title 加上以上代码,服务器能重启?我直接报错!!!

猪头哥哥 12-06 07:29

在新版本中 __unicode__(self)换成了__str__(self)

lyz 12-26 08:22

同ls Django2.0也适用

对这一段的评论会显示在这里

在Add book页面中([http://127.0.0.1:8000/admin/books/book/add](http://127.0.0.1:8000/admin/books/book/add)/ ),外键 publisher用一个选择框显示,多对多 字段author用一个多选框显示。 点击两个字段后面的绿色加号,可以让你添加相关的记录。 举个例子,如果你点击Publisher后面的加号,你将会得到一个弹出窗口来添加一个publisher。 当你在那个窗口中成功创建了一个publisher后,Add book表单会自动把它更新到字段上去 花巧.

David 02-26 10:42

花巧.?什么意思

sleepless 08-05 03:57

作者说django的这个功能很花哨,很棒.

tom 04-07 04:02

当添加多个对象的时候,在页面上的名字都是一样的,没法区分啊

hanrs 10-28 09:31

添加多个对象名字一样 是你的Models 没有__unicode__()方法

intijk 06-09 23:13

希望这里能够加类似”译者注“的字样,我看到这个“花巧”感觉很诧异。

匿名读者 06-29 08:31

太坑爹了, 能不能把前后这段内容换换位

sapjax 07-26 09:09

http://127.0.0.1:8000/admin/books/book/add/ 这个地址,在管理界面根本没有入口进来啊,只能直接输入url了。。。

sapjax 07-26 09:12

嗯 看到了,点books可以

匿名读者 02-08 03:36

MessageMiddleware 也必须uncomment掉,否则add book出错: MessageFailure at /admin/books/book/add/ You cannot add messages without installing django.contrib.messages.middleware.MessageMiddleware

李嘉燊 08-12 12:17

回LS,是要去掉注释的,原文就说了,很好奇这里怎么没说

Xavier 07-19 08:00

花巧,好有喜感

mzvast 07-11 13:23

add中文出错的解决办法 centos6下 修改/etc/my.cnf增加 [client] default-character-set=utf8 [mysqld] character_set_server=utf8 init_connect='SET NAMES utf8' 删掉数据库重新建立设置编码为utf-8,同步一下python manage.py syncdb搞定

猪头弟弟 01-09 05:52

很实用的界面

对这一段的评论会显示在这里

Admin是如何工作的

对这一段的评论会显示在这里

在幕后,管理工具是如何工作的呢? 其实很简单。

深圳远程教育 11-13 04:17

这尼马还简单啊...汗

neo 03-16 17:00

楼上的。。。只能说会者不难啊。 可是我也觉得很难啊。。。学会了就觉得简单了。。。

lincy 08-16 10:27

这还不简单,楼上的那你想怎么样啊

王国伟 09-12 06:03

请教一个问题,这个admin界面上不管选啥语言,最终你能看到的都是"Publisher",在定义表的时候有没有一个类似alias name的功能 我需要显示的是 "出版社" 而不是"Publisher"

agon 10-20 09:23

楼上那个应该是类名,是管理员用来管理数据库的,就应该是定义它的类的名字,改成中文反而不直观了,要改成中文,估计要在类里设定相应中文,并改admin源代码,我初学,是这么理解的

对这一段的评论会显示在这里

当服务启动时,Django从url.py 引导URLconf,然后执行admin.autodiscover() 语句。 这个函数遍历INSTALLED_APPS配置,并且寻找相关的 admin.py文件。 如果在指定的app目录下找到admin.py,它就执行其中的代码。

wyatt 06-18 13:25

url.py应该为urls.py.

hLongQ 05-31 07:37

其实我想问一下,我们在前面哪里指定了app目录?admin.autodiscover()是从哪里知道app目录去找admin.py文件的?

zzm88 07-23 10:06

ls“这个函数遍历INSTALLED_APPS配置,并且寻找相关的 admin.py文件。”函数会在每一个INSTALLED APP里面找admin.py

zzm88 07-23 10:07

ps:我们是在setting.py里添加了'books'这个app的

jwfy 02-19 12:11

ls,而且还是在installed_apps 中,中文意思也很明显的

syshu 10-11 11:47

admin.py 是脚本不是模块。

Rying 01-09 06:08

LS ~Python 模块就是文件

aiterartor 12-12 07:44

现在的版本这些已经改了,建议这点看这上面的http://djangobook.com/django-admin-site/

对这一段的评论会显示在这里

books 应用程序目录下的admin.py 文件中,每次调用admin.site.register() 都将那个模块注册到管理工具中。 管理工具只为那些明确注册了的模块显示一个编辑/修改的界面。

阿萨德 07-16 11:04

对这一段的评论会显示在这里

应用程序django.contrib.auth 包含自身的admin.py ,所以Users和Groups能在管理工具中自动显示。 其它的django.contrib应用程序,如django.contrib.redirects,其它从网上下在的第三方Django应用程序一样,都会自行添加到管理工具。

zuzionly 04-30 03:02

其它从网上下在的第三方Django 下在-->下载

Terry 08-22 00:50

Mac版本,通过 >>import django >>django 进行查询django的安装目录

对这一段的评论会显示在这里

综上所述,管理工具其实就是一个Django应用程序,包含自己的模块、模板、视图和URLpatterns。 你要像添加自己的视图一样,把它添加到URLconf里面。 你可以在Django基本代码中的django/contrib/admin 目录下,检查它的模板、视图和URLpatterns,但你不要尝试直接修改其中的任何代码,因为里面有很多地方可以让你自定义管理工具的工作方式。 (如果你确实想浏览Django管理工具的代码,请谨记它在读取关于模块的元数据过程中做了些不简单的工作,因此最好花些时间阅读和理解那些代码。)

mihello 03-28 08:39

包含自己的模型(models 不是模块module)、模板、试图.....

jason 03-05 10:08

为什么我在django/contrib/admin下面找到URLpatterns?

对这一段的评论会显示在这里

设置字段可选

对这一段的评论会显示在这里

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

匿名读者 07-09 09:24

为什么不是玩弄,就是摆弄

戳戳龙 07-18 07:38

摆弄,,,我邪恶了……

对这一段的评论会显示在这里

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

Peng 07-27 08:15

"你只要编辑Book模块" 其中Book应为Author

Harry 12-03 08:48

@ Peng,谢谢指出!

对这一段的评论会显示在这里
class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField(**blank=True** )
audoe 05-22 12:52

谁加的星号阿?英文版都没有的?

dawncold 08-10 01:40

两个星号是特别声明,但python中也有两个星号呢!

soul_eater 09-01 07:55

这个** 的意思是,新添加的代码。

Woods 10-24 16:07

加了这段代码之后数据库也会随机更新吗?

donly 03-08 04:22

@Woods 无需更新数据库

python-xiyuan 05-11 14:50

** 有来了。。。。。。

杨济运 06-04 16:59

这个星号为什么不删掉,这样会让人感到疑惑,而且直接测试代码不通过。

intijk 06-09 23:17

星号赶快去掉!!!!

intijk 06-09 23:18

如果需要标记“不同”的话,可以加粗,不应该修改代码

文祥 06-23 06:39

很奇怪,加了blank=True,虽然表单可以不填了,但是生成的建表语句里面还是NOT NULL

mihello 03-29 02:47

@文祥 下面有解释

Roy 07-11 03:14

DateField不适用(blank=True)

jasper 07-31 09:48

**纯属强调**

jwfy 02-19 12:15

还有在纠结这个星号的问题。。。。。

zjuysw 02-21 12:20

** **。 这与markdown中的语法非常相似。本意可能是加粗星号之间的文字

gl 03-30 08:59

django.1.7加上就crash了

gl 03-30 09:01

django.1.7加上就crash了,重启后又好了,sorry

yubg 03-31 15:01

注意,这里的**号是提醒你着这个**号之间的代码是新加入的,在拷贝的时候,这个**号要去掉,否则代码会出错。我的机器是win7+python3.3.4+django1.6.2

urmyfaith 09-14 03:07

不要在纠结星号了.. 文章的原始内容是用markdown缩写, 为了突出新增加的内容,使用加粗显示(在待加粗字符两侧各加两个星号.),但是网站并没有使用markdown2htm,所以,原样显示.

lambert 01-13 14:56

Django1.4 (**blank=True** )改成(blank=True),不会报错。

QQasdhy 05-06 06:32

哈哈,这次机智的木有使用**

JohnDHH 07-30 03:35

这里这个**是该死的,赶紧去掉,不然一定报错。

Charles 11-21 12:14

那null=True是干嘛的?

对这一段的评论会显示在这里

这些代码告诉Django,作者的邮箱地址允许输入一个空值。 所有字段都默认blank=False,这使得它们不允许输入空值。

Nick_Wu 10-05 14:40

(**blank=True** )=>('e-mail', blank=True)

qsc 04-27 13:05

email = models.EmailField(blank= 'true')

vienan 02-26 05:30

email = models.EmailField(blank=True)

对这一段的评论会显示在这里

这里会发生一些有趣的事情。 直到现在,除了__unicode__()方法,我们的模块充当数据库中表定义的角色,即本质上是用Python的语法来写CREATE TABLE语句。 在添加blank=True过程中,我们已经开始在简单的定义数据表上扩展我们的模块了。 现在,我们的模块类开始成为一个富含Author对象属性和行为的集合了。 email不但展现为一个数据库中的VARCHAR类型的字段,它还是页面中可选的字段,就像在管理工具中看到的那样。

debugm 12-21 17:56

'我们的模块类开始成为一个富含Author对象属性和行为的集合了',有点ORM的味道了。

www 02-22 16:30

什么叫可选?

QQasdhy 05-06 06:38

怎么在做完如上的模块后,自己再动态添加啊,这时候是不是也需要syncdb来create table呢

nohtyp 12-21 08:35

再站点管理工具上添加了信息也会同步到MySQL数据库吗?

afsfs 08-16 11:38

当然同步

猪头弟弟 01-09 06:09

这里更改了model是不需要执行那个同步函数的 直接就可以体现

Ignora 01-25 08:03

每次修改model后,执行makemigration和migration,将改动同步至数据库,否则将会导致需要引用相关信息的网站出错

对这一段的评论会显示在这里

当你添加blank=True以后,刷新页面Add author edit form (http://127.0.0.1:8000/admin/books/author/add/ ),将会发现Email的标签不再是粗体了。 这意味它不是一个必填字段。 现在你可以添加一个作者而不必输入邮箱地址,即使你为这个字段提交了一个空值,也再不会得到那刺眼的红色信息“This field is required”。

IIssNan 11-04 07:17

图6.3应该是用户列表图,而非书籍列表

asdf 01-16 12:58

才发现 ,图片都看不了。

对这一段的评论会显示在这里

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

对这一段的评论会显示在这里

虽然blank=True同样适用于日期型和数字型字段,但是这里需要详细讲解一些背景知识。

对这一段的评论会显示在这里

SQL有指定空值的独特方式,它把空值叫做NULL。NULL可以表示为未知的、非法的、或其它程序指定的含义。

对这一段的评论会显示在这里

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

对这一段的评论会显示在这里

这会引起不必要的歧义或疑惑。 为什么这条记录有个NULL,而那条记录却有个空字符串? 它们之间有区别,还是数据输入不一致? 还有: 我怎样才能得到全部拥有空值的记录,应该按NULL和空字符串查找么?还是仅按字符串查找?

对这一段的评论会显示在这里

为了消除歧义,Django生成CREATE TABLE语句自动为每个字段显式加上NOT NULL。 这里有个第五章中生成Author模块的例子:

对这一段的评论会显示在这里
CREATE TABLE "books_author" (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(40) NOT NULL,
    "email" varchar(75) NOT NULL
)
;
对这一段的评论会显示在这里

在大多数情况下,这种默认的行为对你的应用程序来说是最佳的,因为它可以使你不再因数据一致性而头痛。 而且它可以和Django的其它部分工作得很好。如在管理工具中,如果你留空一个字符型字段,它会为此插入一个空字符串(而 不是NULL)。

objectjava 05-27 06:24

哈哈。这个问题我早就想到了。因为我desc books_author 发现他还是非空约束的。我想他一定是后台判断插入了一个""。从而又想到了我之前的java程序应该这样做。这难道就是传说中学习框架的体会?

mihello 08-06 05:41

Django这点很好,这样数据一致性就出来了

Kyle 06-25 01:00

老外数据库结构中,字符串字段很多都是这样设计的,这一点很是受用

对这一段的评论会显示在这里

但是,其它数据类型有例外:日期型、时间型和数字型字段不接受空字符串。 如果你尝试将一个空字符串插入日期型或整数型字段,你可能会得到数据库返回的错误,这取决于那个数据库的类型。 (PostgreSQL比较严禁,会抛出一个异常;MySQL可能会也可能不会接受,这取决于你使用的版本和运气了。)在这种情况下,NULL是唯一指定空值的方法。 在Django模块中,你可以通过添加null=True来指定一个字段允许为NULL

施洲博 11-21 03:21

严禁>>严谨

tvbox 03-26 02:42

在django1.3中可以直接给日期类型设置blank=True了。

外星人源码论坛 10-02 12:44

写错字了,是严谨 不是严禁

zlzer 06-30 15:51

面向运气编程吗?

zlzer 06-30 15:52

取决于使用的版本和运气,面向运气编程吗?

blackysy 07-03 05:43

对于这个问题,作者给出了解决方法,就是统一NULL和NOT NULL来解决,避免面向运气编程。

对这一段的评论会显示在这里

因此,这说起来有点复杂: 如果你想允许一个日期型(DateFieldTimeFieldDateTimeField)或数字型(IntegerFieldDecimalFieldFloatField)字段为空,你需要使用null=True * 和* blank=True

对这一段的评论会显示在这里

为了举例说明,让我们把Book模块修改成允许 publication_date为空。修改后的代码如下:

对这一段的评论会显示在这里
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** )
vincent 05-05 10:50

这里必须用null=True 和blank=True两个吗?是不是只用null=True也可以呢?

dawncold 08-10 01:48

单用了null = True是不行的,但在1.3上,光用blank = True就能让日期型的为空了,不用再写null = True

junliang 05-23 08:24

from mysite.books...->from books... 不应该包含mysite

Scar_L 07-23 03:17

楼上正解~

Zz 09-15 12:18

Django1.4需要把*都去掉

anti 04-06 02:31

django1.5中两个都添加了也还是报错- -

anti 04-06 02:33

擦 原来还要更新数据库啊。。 这作者喜欢不一次把话说完么

qq_345421243 05-10 09:44

单用none=True是不行的,因为他检查到你为空,所以弹出提示,这个是Django设计的,你肯定要加上blank=True,none=True可有可无,因为数据库肯定是允许none,要不会插入或修改数据报错,这个错误是数据库返回的

hsia 06-14 07:09

为什么我添加了,新加book没有填写日期还是报错?IntegrityError at /admin/books/book/5/

mywjch 11-20 12:09

@hsia ,你需要syncdb一下

HuangMingya 06-20 02:03

在books中插入数据时会报错。英文版上def中return是self.title,并不是return self.name

stevenlee87 06-29 09:22

syncdb是不会改变数据库结构的

对这一段的评论会显示在这里

添加null=True比添加blank=True复杂。因为null=True改变了数据的语义,即改变了CREATE TABLE语句,把publication_date字段上的NOT NULL删除了。 要完成这些改动,我们还需要更新数据库。

dasdasd 05-17 14:25

这段基本就是外星语

ode2free 05-10 11:09

如果开始model定义没有null=True,那么后添加的话需要更新数据库。

Lionel.Shen 10-12 05:54

Django1.10版本,这里好像只写blank=Ture就可以啊,如下代码,我测试了没有报错,使用admin管理界面不输入日期也一点问题没有。 class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField(blank=True)

对这一段的评论会显示在这里

出于某种原因,Django不会尝试自动更新数据库结构。所以你必须执行ALTER TABLE语句将模块的改动更新至数据库。 像先前那样,你可以使用manage.py dbshell进入数据库服务环境。 以下是在这个特殊情况下如何删除NOT NULL:

天涯望帆 02-09 01:46

最新版本额postgresql不能这么搞,会提示psql不是内部命令,在图形化界面运行下面的语句,或者运行runpsql.bat

ode2free 04-09 21:50

sqlite 用不了

Lang 09-07 07:30

sqlite3只好删表重建了

jowett 01-29 14:14

对应于mysql的语法是 ALTER TABLE books_book change publication_date publication_date date NULL;

桔了个仔 02-15 09:41

某种原因是啥原因

xwj 04-08 06:01

You appear not to have the 'mysql' program installed or on your path.怎么办?

Kevin 06-19 02:55

@xwj 如果出现错误:Error: You appear not to have the 'sqlite3' program installed or on your path. 解决办法: http://stackoverflow.com/questions/4578231/error-while-accessing-sqlite3-shell-from-django-application

streethacker 07-24 09:07

这个地方为什么不能提供相关python层面的API实现,而不得不去用sql语句ALTER TABLE?

dubug 08-16 14:18

MySQL可以执行: alter table books_book modify column publication_date date default NULL;

microivan 09-16 02:47

Sql Server: ALTER TABLE books_book ALTER COLUMN publication_date date NULL;

skyler 12-20 08:20

sqlite 还是提示 不能为 NULL

alice 02-27 03:14

manage.py dbshell提示'mysql'不是内部或外部命令

easongao 05-04 13:49

提示“'mysql'不是内部或外部命令”的解决办法是设置“E:\Program Files\MySQL\MySQL Server 5.5\bin”到环境变量,然后dos窗口执行“set PATH=C:”

adamee 05-21 09:04

@easongao 提到的方法不错 顺带下一条评论里面的@rex也提到了执行语句的问题,注意这里不是MySQL语句。 先改环境变量,然后D:\djangodocument\mysite>manage.py dbshell   mysql> alter table test.books_book modify column publication_date date default n ull; 注意我的数据库名是test,你们的自己改,

戳戳龙 07-18 08:55

我前面步骤都没问题,但是执行manage.py dbshell后,提示:'sqlite3' 不是内部或外部命令,也不是可运行的程序或批处理文件。怎么回事啊? 我是在win7上用PyCharm做的开发。

菜鸟 08-30 03:48

目前用的Django 1.8 先执行:python manage.py makemigtations 然后:python manage.py syncdb 根据模型修改数据库表,无压力 我叫菜鸟

TTTsand 09-17 07:44

@菜鸟,请收下我的膝盖...O(∩_∩)O~

syshu 10-11 12:15

最新版本可以执行makemigrations子命令创建修改,再执行migrate或dbsync子命令应用修改。

vienan 02-26 06:04

sqlite3不用运行dbshell 直接 manage.py makemigrations 再 manage.py migrate 就好了

zmrenwu 06-22 07:22

按照教程各种问题,只好使用中级办法,使用数据库可视化管理工具,到那里面设置为不是null。。。

黑黑的毛驴 07-10 07:24

小菜鸟的拼写有问题。可以看syshu这个,python中是有提示的。 最新版本可以执行makemigrations子命令创建修改,再执行migrate或dbsync子命令应用修改。 具体命令是:python manage.py makemigrations 然后执行:python manage.py migrate(或者python manage.py dbsync)

mr.liu 08-05 02:56

根据楼上的执行,报错:django.db.utils.OperationalError: (1050, "Table 'books_author' already exists")

mr.liu 08-05 03:36

重新生成了一遍表就可以了。 第一步,python manage.py makemigrations books 生成需要执行的sql 可以使用 python manage.py sqlmigrate books 0001 查看sql 第二步,python manage.py migrate 同步到数据库 第三步,修改字段属性 python manage.py makemigrations 生成改动的sql,可以使用 python manage.py sqlmigrate books 0002 查看sql 第四步,python manage.py migrate books 更新到数据库

yazhou 03-12 10:34

MySql对应的语法应该是:ALTER TABLE books_book CHANGE COLUMN publication_date new_name DATE NULL;

Thibault 05-25 13:40

感谢ls,用sqllite3的话先运行 python manage.py makemigrations 然后运行 python manage.py migrate就可以了 不用进dbshell执行alter语句

lvhua 11-09 03:12

先运行 python manage.py makemigrations 然后运行 python manage.py migrate 测试date可以为空提交,通过

对这一段的评论会显示在这里
ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;
Belter xin 08-30 05:32

mysql对于的语法:ALTER TABLE books_book MODIFY COLUMN publication_date DATE DEFAULT NULL;

Lionel.Shen 10-12 05:55

Django1.10版本,这里好像只写blank=Ture就可以啊,如下代码,我测试了没有报错,使用admin管理界面不输入日期也一点问题没有。 class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField(blank=True)

对这一段的评论会显示在这里

(注意:以下SQL语法是PostgreSQL特有的。)

蚁斗士 02-25 08:12

不能说“以下SQL语法”吧?应该是“此SQL语法”或“这个SQL语法”。

阿泰 03-10 14:48

mysql ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;运行出现如何的提示: sql> ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL; ROR 1064 (42000): You have an error in your SQL syntax; check the manual that cor sponds to your MySQL server version for the right syntax to use near 'NOT NULL' a line 1

Xi Guan 03-24 18:56

Mysql的语法,‘django'是我自己的数据库的名字,你可以修改成自己的 ALTER TABLE `django`.`books_book` MODIFY COLUMN `publication_date` DATE DEFAULT NULL;

gw 02-09 12:33

在1.3上,光用blank = True就能让日期型的为空了,不用再写null = True

rex 08-22 08:35

mysql中应该是这样的 mysql> alter table django.books_book modify column publication_date date default null;

fc2002002002 02-21 03:03

同意上面 gw 同学的说法,直接可以不用写 null=True

ok 04-24 06:20

“在1.3上,光用blank = True就能让日期型的为空了,不用再写null = True” 赞 1.5适用

K 07-13 20:47

赞同不用写 null=True 1.5适用

mihello 08-06 06:40

LS的你都用sql改NOT NULL 为 NULL 所以你现在加不加null=True当然可以,但是在你构建models的时候比如建表,数据迁移的时候请一定加上,要不建立的表的字段还是NOT NULL。

对这一段的评论会显示在这里

我们将在第十章详细讲述数据库结构更改。

ode2free 05-10 11:20

关于blank和null,做个简陋的笔记: 1.对于字符串型字段:只需要设置blank=True,无需关心null(事实上django自动添加not null,用来保证空值均为空字符串类型("")从而便于查询),可以随意增加或删掉blank=True选项,无需关心更新数据库。 2.对于日期型和数字型字段:需要同时设置blank=True和null=True,并且如果是后添加或删除的话需要手动更新数据库。(更新数据库参考第十章)

soul_eater 09-01 08:12

这个解释的很好,喜欢~

freedoom 05-22 14:26

哎,老了一岁~

scarl 07-25 02:13

@ode2free good job!

streethacker 07-24 08:47

@ode2free 很好的总结,赞一个

Lionel.Shen 10-12 05:56

Django1.10版本,这里好像只写blank=Ture就可以啊,如下代码,我测试了没有报错,使用admin管理界面不输入日期也一点问题没有。 class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField(blank=True)

lvhua 11-09 02:33

ode2free总结的不错

对这一段的评论会显示在这里

现在让我们回到管理工具,添加book的编辑页面允许输入一个空的publication date。

对这一段的评论会显示在这里

自定义字段标签

对这一段的评论会显示在这里

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

对这一段的评论会显示在这里

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

对这一段的评论会显示在这里

举个例子,说明如何将Author.email的标签改为e-mail,中间有个横线。

对这一段的评论会显示在这里
class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField(blank=True, **verbose_name='e-mail'** )
KennX 10-26 09:17

verbose_name='电子邮箱' 不支持中文,必定报错

gaodayue 01-23 14:40

应该有支持中文的方法吧,求教?!!

donly 03-08 07:14

请在文件头指定编码:#coding=utf-8,重启服务。

zanpen2000@163.com 01-16 22:09

这里不重启服务器也可以。

mihello 03-29 08:09

我也遇到models.py里中文编码问题。centos6 系统,如下设置:LANG="en_US.UTF-8" LC_ALL='',models.py(加上# -*- coding: utf-8 -*-) 在windows下用文本转换为UTF-8编码,然后上传到linux上。secureCRT 会话选项--外观 字体编码UTF-8

binbin 09-13 07:36

在models.py机上utf8支持就可以支持中文了。

IceWater 10-17 02:10

显示中文的话,再文件头部加上 # -*- coding: utf-8 -*-

horizonshd 09-14 14:57

Django-1.11.3中,只要之前在settings.py中设置过 LANGUAGE_CODE = 'zh-hans',这里的标签就设置为中文后就可以在页面正常显示出来。

Charles 11-21 12:38

文件头指定# -*- coding: utf-8 -*- 然后 email = models.EmailField(u'电子邮箱',blank=True) 就支持了

Charles 11-21 12:39

哦对了,还要在settings.py中设置LANGUAGE_CODE = 'zh-hans',

对这一段的评论会显示在这里

修改后重启服务器,你会在author编辑页面中看到这个新标签。

zanpen2000@163.com 01-16 22:09

这里不重启服务器也可以。

erhuabushuo 05-18 02:51

不能说不用重启 只是因为Django默认会监测文件改动 自动重新加载!

a 10-15 07:32

樓上正解!可以在提交文件更改的前後分別查看後臺日誌,更改文件服務器會重新啟動。

对这一段的评论会显示在这里

请注意,你不必把verbose_name的首字母大写,除非是连续大写(如:"USA state")。Django会自动适时将首字母大写,并且在其它不需要大写的地方使用verbose_name的精确值。

Harry 01-05 09:40

verbose_name 中的 verbose 是什么意思?

meng 03-15 06:55

verbose 冗长的

刚刚去查了下verbose的意思.. 05-22 01:19

reelai 03-10 07:07

verbose,一般来说是详细的意思,例如mysqld --verbose --help

对这一段的评论会显示在这里

最后还需注意的是,为了使语法简洁,你可以把它当作固定位置的参数传递。 这个例子与上面那个的效果相同。

对这一段的评论会显示在这里
class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField(**'e-mail',**  blank=True)
zjclost 02-03 00:28

固定位置参数传递不能是中文数字,若将此处的e-mail改为电子邮件,则会出错

mihello 03-30 01:52

可以中文啊,我上面有写:“我也遇到models.py里中文编码问题。centos6 系统,如下设置:LANG="en_US.UTF-8" LC_ALL='',models.py(加上# -*- coding: utf-8 -*-) 在windows下用文本转换为UTF-8编码,然后上传到linux上。secureCRT 会话选项--外观 字体编码UTF-8” windows的未试过

qq_345421243 05-13 01:21

可以中文,记得添加这句代码就行了:# _*_ coding: utf-8 _*_ 还有我用的是Django1.5.1

sunman 05-27 10:17

确实可以显示中文

Kevin 06-19 04:09

Explicit is better than implicit.依靠固定位置的参数传递,verbose_name是一个坏主意。

atlas 09-17 03:40

@qq_345421243 那么费劲 coding:utf8就可以了

猪头哥哥 12-07 01:38

在新版本中 直接写中文就行了不会出什么乱码

对这一段的评论会显示在这里

但这不适用于ManyToManyFieldForeignKey字段,因为它们第一个参数必须是模块类。 那种情形,必须显式使用verbose_name这个参数名称。

mark 07-21 15:01

horizonshd 09-14 15:04

Django-1.11.3中,ManyToManyField 和ForeignKey字段不设置verbose_name也会正常显示,网页中相应的标签显示为对应的类名。

Ignora 01-26 10:34

ls, 实际上任何一个版本的django不设置verbose_name都会正常显示,但设置之后可以显示你想要的名字。

对这一段的评论会显示在这里

自定义ModelAdmi类

william 11-07 14:41

应该是ModelAdmin吧,这里写成ModelAdmi了

Brad 03-21 01:29

我们评注了.网站会根据我们的评注更新么?

tao 03-26 10:37

应该不会

yooke 05-11 04:42

如果会的话,我现在看到的应该是Admin了,可惜不是...

chu 07-08 05:45

评注益于学习交流,看书时候看看评注,或闲扯或鬼扯或扯淡,或补充或修正或质疑,凡此种种,威力古德!

K 07-13 20:50

我也爱看评注,为毛他们无视我们的评注啊

streethacker 07-24 09:04

评注是一种态度啦,学习内容的时候看看评注,分享经验和交流学习。

lincy 08-16 11:30

貌似翻译完了之后网站就没人管了

楼上闹起来了 09-21 11:32

匿名读者 09-21 11:34

并且正好被管理工具使用,而不是专门针对管理工具的,,,,,,什么意思呢,,,这一节到底是要讲什么呢,,,,

fengxu 06-05 02:56

并且正好被管理工具使用,而不是专门针对管理工具的..... 意思是说上面讲的内容是与第五章模型相关的,即使不用Admin管理页面也是可以使用的。 这句正好和本章最上面呼应。

tao 09-24 12:06

这里笔误,应该是ModelAdmin!

tao 01-24 03:21

有点像看电影弹屏的感觉 感觉这个注释很赞

egg 02-04 08:52

外星人源码论坛 10-02 12:52

楼上的各位 不要死磕这个笔误了

chg_self 07-16 02:23

无关紧要的错误 大家不好太苛刻 这里又不是学英文字母

对这一段的评论会显示在这里

迄今为止,我们做的blank=Truenull=Trueverbose_name修改其实是模块级别,而不是管理级别的。 也就是说,这些修改实质上是构成模块的一部分,并且正好被管理工具使用,而不是专门针对管理工具的。

对这一段的评论会显示在这里

除了这些,Django还提供了大量选项让你针对特别的模块自定义管理工具。 这些选项都在ModelAdmin classes里面,这些类包含了管理工具中针对特别模块的配置。

jammyWolf 07-24 02:08

Lionel.Shen 10-12 06:19

模块都够复杂的了,还设计django的管理工具,把django都研究明白了再说吧

对这一段的评论会显示在这里

自定义列表

对这一段的评论会显示在这里

让我们更深一步:自定义Author模块的列表中的显示字段。 列表默认地显示查询结果中对象的__unicode__()。 在第五章中,我们定义Author对象的__unicode__()方法,用以同时显示作者的姓和名。

对这一段的评论会显示在这里
class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField(blank=True, verbose_name='e-mail')

    **def __unicode__(self):**
        **return u'%s %s' % (self.first_name, self.last_name)**
bobby 08-29 03:33

def __ 中间少了一个空格

linuxer24@163.com 11-09 04:39

****可以去掉

gegewu 05-17 05:27

如果前面设置了中文,貌似也没必要return unicode字符串

小康不起来 11-28 08:45

两头的星号要去掉,不然服务直接挂掉,升为小白的我搞了半天才明白

heliar 07-18 03:48

星号是markdown的bold语法啦~~上面不是已经有人讨论过了

CI_knight 10-22 01:47

**** 去掉吧,看到这里我确信上边的也可以去掉了.

JohnDHH 07-30 06:37

现在发现**只是表示重点······

Lionel.Shen 10-12 06:21

一直没整明白,python语法中两个**号代表什么意思,这一点好像不符合python的宗旨啊。 这句话 **def __unicode__(self):** 什么意思?大神们回复

猪头哥哥 12-07 01:41

这个**只是为了告诉读者 这里加了重要的代码 你们在复制的时候动动奶子

对这一段的评论会显示在这里

结果正如图6-7所示,列表中显示的是每个作者的姓名。

C.J. 06-15 08:25

没有图片

刘体阳 07-23 09:02

以下图片损坏

K' 01-17 05:34

下面的图片全都挂掉了。

objectjava 05-27 06:59

老大补图

soul_eater 09-01 08:21

- - 只能靠自己了

donly 03-08 07:17

图片文件不存在 404

pythoner 09-17 09:29

图片呢?售后服务跟不上啊!

dotBuddle 02-16 12:55

图:http://www.djangobook.com/en/2.0/_images/author_changelist1.png

weige 11-22 09:12

为什么我的作者名字显示都是Author object, 当admin.py加了 class AuthorAdmin(admin.ModelAdmin): list_display = ('first_name', 'last_name', 'email') 后,显示是根据这显示了, 但是book选项里,还是显示Author object,不显示作者名

打酱油的 12-01 18:37

楼上的先看看上一章吧 __unicode__(self) 方法定义过了吗?

匿名读者 05-22 01:30

http://www.djangobook.com/en/2.0/chapter06.html 对照着英文的一起看,英文上的有图

starof 02-09 02:44

图可以参考 http://www.cnblogs.com/starof/p/4274116.html

__unicode__ 06-26 15:30

@weige 引用stack overflow上的回答: “In Python 2, the object model specifies __str__() and __unicode__() methods. If these methods exist, they must return str (bytes) and unicode (text) respectively. The print statement and the str() built-in call __str__() to determine the human-readable representation of an object. The unicode() built-in calls __unicode__() if it exists, and otherwise falls back to __str__() and decodes the result with the system encoding. Conversely, the Model base class automatically derives __str__() from __unicode__() by encoding to UTF-8. In Python 3, there’s simply __str__(), which must return str (text).” 大意是说python3只能用__str__()

vitlint 08-21 16:00

表添加中文办法:在admin.py里面 import sys reload(sys) sys.setdefaultencoding('utf8')

对这一段的评论会显示在这里

图 6-7. 作者列表

对这一段的评论会显示在这里

我们可以在这基础上改进,添加其它字段,从而改变列表的显示。 这个页面应该提供便利,比如说:在这个列表中可以看到作者的邮箱地址。如果能按照姓氏或名字来排序,那就更好了。

对这一段的评论会显示在这里

为了达到这个目的,我们将为Author模块定义一个ModelAdmin类。 这个类是自定义管理工具的关键,其中最基本的一件事情是允许你指定列表中的字段。 打开admin.py并修改:

对这一段的评论会显示在这里
from django.contrib import admin
from mysite.books.models import Publisher, Author, Book

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

admin.site.register(Publisher)
**admin.site.register(Author, AuthorAdmin)**
admin.site.register(Book)
lcc 06-05 08:02

haoaina521 05-15 02:36

这里的from mysite.books.models import Publisher, Author, Book也要改成from books.models import Publisher, Author, Book,不然会发生ImportError。

chu 07-08 05:54

class AuthorAdmin(admin.ModelAdmin)须在admin.site.register(Author, AuthorAdmin)上方?不可在其下方??class须在引用代码的上方定义么,python也是这样么,还是只有django这样??

jwfy 02-19 13:05

ls,这是先造出这个类,再注册这个类而已

help 05-12 18:01

为何我的admin.py 变成空的了,然后内容跑到 __init__.py 里了

唐琅 03-24 14:15

....把星号看成注释了

匿名读者 10-08 13:17

一直不明白**...**前后俩**是什么意思。 突然想明白了,其实是内容加粗体! 哈哈。

匿名读者 11-18 09:18

如果学过markdown就知道了 **内容** 就是加粗,这里翻译的没有解析markdown标记

匿名读者 03-12 10:12

https://docs.djangoproject.com/en/2.2/ref/contrib/admin/#modeladmin-options

匿名读者 03-12 10:19

https://docs.djangoproject.com/en/2.2/ref/contrib/admin/#modeladmin-options 这里可以查询所有的ModelAdmin属性,list_display是其中一个属性。

对这一段的评论会显示在这里

解释一下代码:

对这一段的评论会显示在这里

我们新建了一个类AuthorAdmin,它是从django.contrib.admin.ModelAdmin派生出来的子类,保存着一个类的自定义配置,以供管理工具使用。 我们只自定义了一项:list_display, 它是一个字段名称的元组,用于列表显示。 当然,这些字段名称必须是模块中有的。

jerry 06-24 06:35

设置自定义列表表头,但是未显示,什么原因呢?

dingyj 02-24 09:14

list_display,不能写成别的,否则达不到效果。

@ls 05-22 01:36

当然,这些字段名称必须是模块中有的。 所以,应该是可以改成别的名字的,前提是你应当先去模块中把对应的名字也改了,我猜

mr.liu 08-05 06:44

神奇啊,可以使用。

q2z2012 01-20 03:54

这个描述看的有点晕。反正折腾后才发现:list_display 可查看页面显示字段的顺序。将代码改成: list_display=('email','first_name','last_name') 再查看页面,email就在第一列了。

对这一段的评论会显示在这里

我们修改了admin.site.register()调用,在Author后面添加了AuthorAdmin。你可以这样理解: 用AuthorAdmin选项注册Author模块。

对这一段的评论会显示在这里

admin.site.register()函数接受一个ModelAdmin子类作为第二个参数。 如果你忽略第二个参数,Django将使用默认的选项。PublisherBook的注册就属于这种情况。

对这一段的评论会显示在这里

弄好了这个东东,再刷新author列表页面,你会看到列表中有三列:姓氏、名字和邮箱地址。 另外,点击每个列的列头可以对那列进行排序。 (参见图 6-8)

罗喉 11-26 09:43

图片看不到...

sky 09-21 06:28

怎么我的没有显示出来呢

可以去看英文原版6-8配图 10-23 06:02

可以去看英文原版6-8配图

130092 02-17 15:18

图片地址http://www.djangobook.com/en/2.0/_images/author_changelist2.png

我的也没有显示新的列 08-22 09:12

我的也没有显示新的列

RockPine 09-18 05:48

只能说,记得改完点保存

Mr.Renekton 02-24 08:51

make sure that you add an author,then you will see that.

ToiPhive 04-24 20:51

我的情况是‘list_display’这个属性如果变成别的名,比如‘display’,就不显示,改回‘list_display’就能显示。看来是规定死的东西。

nick 09-11 12:44

我用的1.6.6, 这里不用再次缩进

TTTsand 11-28 05:41

我想问一下这个排序是基于什么规则进行排序的,感觉没有特定规则啊??????????

starof 02-09 02:44

图可以参考 http://www.cnblogs.com/starof/p/4274116.html

猪头哥哥 12-07 06:20

注意这里要在注册器里把 modle的第二个参数写上

对这一段的评论会显示在这里

图 6-8. 修改后的author列表页面

对这一段的评论会显示在这里

接下来,让我们添加一个快速查询栏。 向AuthorAdmin追加search_fields,如:

对这一段的评论会显示在这里
class AuthorAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'email')
    **search_fields = ('first_name', 'last_name')**
对这一段的评论会显示在这里

刷新浏览器,你会在页面顶端看到一个查询栏。 (见图6-9.)我们刚才所作的修改列表页面,添加了一个根据姓名查询的查询框。 正如用户所希望的那样,它是大小写敏感,并且对两个字段检索的查询框。如果查询"bar",那么名字中含有Barney和姓氏中含有Hobarson的作者记录将被检索出来。

dimens 04-11 08:51

后面的意思似乎是“大小写不敏感”。

wzdxt 07-16 02:53

对的 大小写不敏感

匿名读者 12-20 03:33

怎么看不到图片啊

vincent 05-05 10:56

大小写不敏感,这里应该是写错了

pythoner 09-17 09:34

差点被坑,应该是大小写不敏感

yesterday 12-03 02:05

翻译者想看看读者的阅读是否认真

匿名读者 05-22 01:45

http://127.0.0.1:8000/static/admin/img/icon_searchbox.png 搜索框左边的放大镜不见了。。。。额

starof 02-09 02:44

图可以参考 http://www.cnblogs.com/starof/p/4274116.html

对这一段的评论会显示在这里

图 6-9. 含search_fields的author列表页面

对这一段的评论会显示在这里

接下来,让我们为Book列表页添加一些过滤器。

杨大眼 01-23 06:52

多对多关系在list_display里不能使用 1.7.3

Nedcar 10-10 08:23

按上述操作list_filter怎么在1.11中用不了呢?

Nedcar 10-10 09:21

不好意思,上面我的描述有问题。其实是publication_date,这个参数加入到list_display和list_filter中的时候会报错,提示他不是一个可调用的( which is not a callable,...),有没有大神解释一下是怎么回事吗?英语不好,看文档也没查到。

刘家乐 02-07 07:21

多对多关系在2.1里也一样没法用,这里要注意一下

刘家乐 02-07 07:23

Auther 和 Book 在这里就是多对多关系,所以不能添加 Auther 字段显示

对这一段的评论会显示在这里
from django.contrib import admin
from mysite.books.models import Publisher, Author, Book

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

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

admin.site.register(Publisher)
admin.site.register(Author, AuthorAdmin)
**admin.site.register(Book, BookAdmin)**
soul_eater 09-01 08:41

list_filter = ('publication_date',) 中间的","可以不加吧...

soul_eater 09-01 08:45

一定要加"," 不加会错- -

Rex.Ye 01-10 01:15

这里注意,关系键不能作为serach_fields 即,由于【publisher】是Book的外键,如果在BookAdmin中添加search_fields=('publisher',)的话就会报错。如果想根据publisher搜索的话,可以用:list_filter = ('publication_date','publisher')

mihello 03-30 07:22

用外键作为search_list 元组会如此报错TypeError: Related Field has invalid lookup: icontains

qq_345421243 05-13 02:02

楼上的正解,刚测试过

ffuyfd 03-28 02:45

可以使用列表:search_fields =['first_name', 'last_name']

匿名读者 09-29 09:38

list_filter后面参数不加','为什么会报错?

猪头哥哥 12-07 07:01

在python中因为有tuple所以在单个元素时需要在结尾加逗号 不然就报错。大家记住 不管单个或者几个 在最后加个逗号总是没错的

AlexJason 12-22 14:01

“list_filter”这个标签的定义就是一个列表或者元组,Python语法是要有个逗号的

lyz 12-26 08:31

Django2.0 list_filter -> search_fields

lyz 12-26 08:56

Django2.0 发现一个问题,好像不能用中文查询,应该是建表的字符格式和输入查询的信息的字符集格式不一样。

chg_self 07-16 02:37

你连(‘元素1’)和(‘元素1’,)的区别都不知道 ,还学毛django 建议回去再学学python语法

Ignora 01-28 00:38

ls这句话除了显示你很刻薄以外毫无作用

对这一段的评论会显示在这里

由于我们要处理一系列选项,因此我们创建了一个单独的ModelAdmin类:BookAdmin。首先,我们定义一个list_display,以使得页面好看些。 然后,我们用list_filter这个字段元组创建过滤器,它位于列表页面的右边。 Django为日期型字段提供了快捷过滤方式,它包含:今天、过往七天、当月和今年。这些是开发人员经常用到的。 图 6-10显示了修改后的页面。

vincent 05-05 10:57

下面的图片看不了

Boa 07-20 05:57

图片资源死掉了

su 04-26 12:48

“因此我们创建了一个单独的ModelAdmin类”应该是“因此我们创建了一个单独的ModeAdmin子类“吧?

starof 02-09 02:45

图可以参考 http://www.cnblogs.com/starof/p/4274116.html

对这一段的评论会显示在这里

图 6-10. 含过滤器的book列表页面

对这一段的评论会显示在这里

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

对这一段的评论会显示在这里

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

alexcool 07-07 12:53

增加了这行代码后,页面出以下错误: DatabaseError at /admin/books/book/ Incorrect datetime value: '%Y-%m-%d 00:00:00' 我使用的是MySQL作为数据库和MySQL官方的connector,有知道怎么解决的吗?

对这一段的评论会显示在这里
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date')
    list_filter = ('publication_date',)
    **date_hierarchy = 'publication_date'**
zagfai 08-01 15:46

終於忍唔住要發條評論.. what amazing...

wq 09-06 08:57

使用date_hierarchy时,如果数据库中publication_date字段对应没有值(有一个值即可不报错),会报错。因此要使用date_hierarchy时,最好还是设置字段为not null比较好。

lawlietwf 07-30 13:54

我就想知道。。为什么这个网站的图我都看不了。。

patrick 12-25 16:44

同楼上,并且我加了这段代码刷新页面并没有什么变化

monkey 02-25 05:23

改变在选择book来修改的下面。 英文版的有图。http://www.djangobook.com/en/2.0/chapter06.html

111 03-26 02:11

要图的,都看到这里了,都还不知道英文版的地址吗,手都伸成这样了,你还不赶紧ctrl+w?

重新开了个页面ctrl+w了一下,哈哈,我知道英文页面 05-22 01:56

Channer 07-25 02:54

这页面是markdown解析失败了么? 这么多星号和反斜杠

mr.liu 08-05 07:28

那些说看不见图的,能别来看了么?不知道对照英文的一起看?

CopyStyle 12-18 02:07

Ctrl+w 是什么鬼?

Jasper 07-07 07:36

楼上说ctrl+w的别让我遇到你,遇到了看我不打死你....

lxj 07-08 04:43

被楼上说ctrl+w的逗比逗笑了

猪头哥哥 12-07 07:18

应该是alt+F4

Ignora 01-28 00:42

1楼,其实我觉得应该是how amazing

刘家乐 02-07 07:36

注意一下,这里说的两个以上的值指的是Book里的字段多样性,如果全部的书都设置的一个出版社,那么filter就不会显示,在有两个以上出版社时才会出现筛选框

对这一段的评论会显示在这里

修改好后,页面中的列表顶端会有一个逐层深入的导航条,效果如图 6-11. 它从可用的年份开始,然后逐层细分到月乃至日。

匿名读者 08-28 12:12

木有变化。。。

hfmu 02-16 05:03

为什么图片都不能显示

Belter xin 08-30 06:03

在“Select book to change”下面有变化,要很仔细才能看到。

猪头哥哥 12-07 07:23

这里说看不到效果的同学请先添加一本书

对这一段的评论会显示在这里

图 6-11. 含date_hierarchy的book列表页面

对这一段的评论会显示在这里

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

对这一段的评论会显示在这里

最后,让我们改变默认的排序方式,按publication date降序排列。 列表页面默认按照模块class Meta(详见第五章)中的ordering所指的列排序。但目前没有指定ordering值,所以当前排序是没有定义的。

bule 12-21 07:26

这里的class Meta是在models.py里面的类当中

mr.liu 08-05 07:49

原来可以用在admin.py中。

Belter xin 08-30 06:07

好多“重写”

猪头哥哥 12-07 07:26

这里的ordering就是直接给了一个list_display的默认排序 再添加一本书 看看顺序

对这一段的评论会显示在这里
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    **ordering = ('-publication_date',)**
对这一段的评论会显示在这里

这个ordering选项基本像模块中class Metaordering那样工作,除了它只用列表中的第一个字段名。 如果要实现降序,仅需在传入的列表或元组的字段前加上一个减号(-)。

lincy 08-16 12:27

ordering可以接受多个参数啊,为什么说只用列表的第一个字段名

111 03-26 03:18

BookAdmin's ordering will override Book's ordering, test in django 1.6.2

adamee 05-22 02:01

测试了一下用两个没错,但是至少元祖第一个有效果

adamee 05-22 02:02

测试了一下用两个没错,但是只是元组第一个量有效果

mr.liu 08-05 07:53

使用两个字段,是在第一个字段相同时候,再使用第二个字段做比较。

yangkaimoda 03-09 10:48

我定义的这个 ordering 为什么没生效?

猪头哥哥 12-07 07:27

ordering排序可以接收单个参数也可以多个参数 视具体情况而定

对这一段的评论会显示在这里

刷新book列表页面观看实际效果。 注意Publication date列头现在有一个小箭头显示排序。 (见图 6-12.)

yyc 12-01 14:26

箭头的方向,应该是朝下的吧?

starof 02-07 08:20

箭头方向是根据排序是升序还是降序来定的,降序自然是向下

对这一段的评论会显示在这里

图 6-12 含排序的book列表页面

对这一段的评论会显示在这里

我们已经学习了主要的选项。 通过使用它们,你可以仅需几行代码就能创建一个功能强大、随时上线的数据编辑界面。

对这一段的评论会显示在这里

自定义编辑表单

对这一段的评论会显示在这里

正如自定义列表那样,编辑表单多方面也能自定义。

golbz 10-22 10:55

golbz 10-22 10:55

从这里开始是点书名进去之后的页面

tj 08-05 05:28

记得重新 manage.py runserver

对这一段的评论会显示在这里

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

lionf 04-03 09:19

fields = ('title', 'authors', 'publisher', 'publication_date')这里的authors错了,应该是author

lionf 04-03 09:22

噢 原文是对的,是我在author = models.ManyToManyField(Author)写错了没有加s

对这一段的评论会显示在这里
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')**
天涯望帆 02-09 02:37

没有fields选项,要用list_display实现

xepher 12-15 09:34

1.3.1测试通过能用fields

melzg 03-22 13:52

fields选项的效果,在点开一条具体的Record时,可以看出调整后的效果。

shuijing 04-20 13:05

there is no comma behind 'publication_date' at the 2nd line,but there is a comma behind 'publication_date' at the 3rd line. why?

jasper 08-01 09:56

为什么看不到author那一栏?

jasper 08-01 09:58

为什么看不到author那一栏?难道那一栏就是不显示的么?求解答

Paulzhao 08-07 08:45

@jasper 因为author与Book是ManyToMany的关系,所以不能在这里指定

coco 09-05 07:09

Django 1.5.2 没有fields选项,用list_display实现。并且显示author列时 由于多对多的关系 会报错。这个多对多的关系是在建表时候导致的么?求解释和解决方法

下雨煮鱼 09-08 17:07

这里的author是说在编辑页面显示,即点中title进入的页面。而不是,楼上他们理解的list的那个页面。

打点滴 10-25 05:45

楼上是对的 谢谢!!

KyleYang 04-01 10:48

author不应该加s

wangyi 01-13 02:15

ls正确,authors应该是author,fields中的字段应该是models中定义的字段

trickee 08-04 07:59

关于怎么在大家理解的list那个页面里面显示author,解决方法是在Book加个method,例如: class Book(models.Model): authors = models.ManyToManyField(Author) def get_authors(self): return ','.join([p.first_name for p in self.authors.all()]) 然后在admin.py里,在bookadmin的fields里面加个钩子,例如: fields = ('title', 'get_authors')

lvhua 11-09 03:41

1L一语中的。 fields选项的效果,在点开一条具体的Record时,可以看出调整后的效果。

猪头哥哥 12-07 07:36

这个效果可以点某一本书 编辑页面看到 和原来的顺序是一致的 可以改一下fields的顺序看效果

对这一段的评论会显示在这里

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

对这一段的评论会显示在这里

通过fields这个选项,你可以排除一些不想被其他人编辑的fields 只要不选上不想被编辑的field(s)即可。 当你的admi用户只是被信任可以更改你的某一部分数据时,或者,你的数据被一些外部的程序自动处理而改变了了,你就可以用这个功能。 例如,在book数据库中,我们可以隐藏publication_date,以防止它被编辑。

曹源 01-15 08:19

fields这个属性是不是已经去掉了,我怎么没有发现呢?

曹源 01-15 08:24

fields这个属性是不是已经去掉了,我怎么没有发现呢?,这个地方应该可以用 list_display来实现吧?

宁静致远 02-25 01:27

回楼上的,这个是子页面里面的排序显示,不在一个页面

gw 02-09 13:10

field体现在修改(change)表单页面。

chu 07-08 06:19

三楼、四楼正解。

jasper 08-01 09:56

隐藏的属性是在点击书名之后才能发现的,和未加该句比起来,publication_date项被隐藏了!!另外,用list_play不能代替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')**
jun 04-29 09:34

怎么下面开始图片都没法显示了。。。

sephiroth 06-22 14:35

'当你的admi用户' 应该是 '当你的admin用户'

添加目录 04-13 17:38

这个字段隐去了就没办法加上新记录

匿名读者 08-03 15:10

python2.7.3 django1.5.1 slqite3去掉publication_date,提交报错。数据库指针错误

对这一段的评论会显示在这里

这样,在编辑页面就无法对publication date进行改动。 如果你是一个编辑,不希望作者推迟出版日期的话,这个功能就很有用。 (当然,这纯粹是一个假设的例子。)

mihello 08-07 09:35

哈哈,搞笑

console 10-21 13:57

没看明白

www 02-22 17:34

好贱 - - !

离深深 05-18 17:01

model里面的Book的publish_date添加null=Ture后,好像还得执行makemigration和migrate命令才行

离深深 05-18 17:02

应该是在下面一行的评注。。。。

welwel 09-13 02:41

去掉publication_date后在添加书的时候日期选项,创建成功后也是空值 这样就可以通过查询历史发现书被添加的时间了,但是就算是在publication_date可选的时候查看历史中添加书的时间也是系统时间啊,不知道为什么说可以促使作者出书

电饭锅 02-07 08:00

他的意思只是作者不能自己决定书的出版日期了,编辑在后台才能指定

Lily Paper 10-28 15:23

这说的是pubulication_date不能被change,也就是http://127.0.0.1:8000/admin/books/book/1/change/这个页面中不显示这一项,但是在http://127.0.0.1:8000/admin/books/book/这个页面上是有pubulication_date日期的,以此来说出版时间被确定而不能被修改。

对这一段的评论会显示在这里

当一个用户用这个不包含完整信息的表单添加一本新书时,Django会简单地将publication_date设置为None,以确保这个字段满足null=True的条件。

lazybios 10-14 13:21

次处图片网址http://www.djangobook.com/en/2.0/_images/login.png

lazybios 10-14 13:22

楼上打错了 “以确保这个字段满足null=True的条件”最好改成“所以最好确保该字段满足null=True”

dubug 08-17 01:41

所以你应该确保该字段拥有null=True属性.

电饭锅 02-07 08:25

添加了null字段之后要重新生成迁移文件并执行migrate

对这一段的评论会显示在这里

另一个常用的编辑页面自定义是针对多对多字段的。 真如我们在book编辑页面看到的那样,多对多字段 被展现成多选框。虽然多选框在逻辑上是最适合的HTML控件,但它却不那么好用。 如果你想选择多项,你必须还要按下Ctrl键(苹果机是command键)。 虽然管理工具因此添加了注释(help_text),但是当它有几百个选项时,它依然显得笨拙。

daixijaing 02-03 16:13

真如(正如)我们在book编辑页面看到的那样

外星人源码论坛 10-02 13:46

楼上的各位 不要死磕这个笔误了

对这一段的评论会显示在这里

更好的办法是使用filter_horizontal。让我们把它添加到BookAdmin中,然后看看它的效果。

Jason 05-18 08:29

The value of 'filter_horizontal[0]' must be a ManyToManyField

对这一段的评论会显示在这里
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'publisher', 'publication_date')
    list_filter = ('publication_date',)
    date_hierarchy = 'publication_date'
    ordering = ('-publication_date',)
    **filter_horizontal = ('authors',)**
haiyang 11-27 13:03

没有图片

terry 09-05 07:45

说实话,filter_horizontal还不如用多选框,占空间太大了。

同上 11-11 15:00

adamee 05-22 02:17

list_display = ('title','authors','publisher','publication_date') 加了一个,'authors' 就报错了,搞不懂为什么

adamee 05-22 02:18

authors = models.ManyToManyField(Author) 隐隐约约记得好像上文有说过多对多关系不能这么玩,留待后人验证

allen 07-01 07:20

空间大小在html里面是可以调节的。

mihello 08-07 10:05

正如上面说的,如果只有几个作者那么多选框好用,但是如果有几百个的时候就傻了,这时候就可以改用filter_horizontal

haoy 07-14 06:08

如果在authors使用verbose_name='作者'用了中文,设置filter_horizontal后界面上该字段什么都没有,应该用verbose_name='作者'.decode('utf8')

ithee 12-24 06:17

<class 'books.admin.BookAdmin'>: (admin.E109) The value of 'list_display[1]' must not be a ManyToManyField.

对这一段的评论会显示在这里

(如果你一着跟着做练习,请注意移除fields选项,以使得编辑页面包含所有字段。)

chu 07-08 06:27

一“直”

Jason 05-18 08:29

The value of 'filter_horizontal[0]' must be a ManyToManyField

对这一段的评论会显示在这里

刷新book编辑页面,你会看到Author区中有一个精巧的JavaScript过滤器,它允许你检索选项,然后将选中的authors从Available框移到Chosen框,还可以移回来。

ode2free 04-09 22:36

这个filter_horizontal很精巧啊

Black Glory 06-19 09:00

没有截图,非常不便

future 06-29 08:31

django太强大了,filter_horizontal 这个很牛逼啊

王志明 09-20 00:14

当authors 添加了自定义标签verbose_name='作者' 为中文的时候, javascript 过滤器显示不出来

nh 07-07 14:09

当authors 添加了自定义标签verbose_name='作者' 为中文的时候, javascript 过滤器显示不出来 确实是,verbose_name只能为英文

匿名读者 08-03 15:27

verbose_name='作者' .decode('utf-8'),可解决这个问题

jasper 08-05 02:58

很是精巧

lincy 08-16 12:45

verbose_name='作者' .decode('utf-8'),确实可以解决javascript 过滤器上无法显示中文的问题

aa 10-10 14:24

为什么我用中文连网页都刷不出来了

tyroger 10-14 09:31

1.5.4 不用加decode也能用中文

patrick 12-25 17:02

为什么我的没有任何改变?是因为在unix/linux下的缘故吗,试了chrome和firefox都不行

darkenergy 03-26 11:54

lsd的,我的也是毫无变化,有解决吗?

learner 05-14 03:56

为什么我的加入之后以刷新就报错了

戳戳龙 07-19 05:59

为什么我的没有显示过滤器效果,还是之前的复选框?

TTTsand 09-22 05:39

python2.7.6+django1.7+SQLite3无法显示filter_horizontal功能,如何解决啊?

周明辉 11-27 13:49

同楼上 求解觉啊

Adoo 01-21 05:06

报错的,请检查一下元组里的“authors”后面是否已经添加了一个逗号“,”。

leslieyuan 01-21 15:11

没有效果的,因为你你们从头到尾都没有打开静态的css和js,你们没有发现每次你们连接上网站的时候,有http 404 的错误吗?提示没有找到css和js。因为admin管理站点的css和js没有加载,所以看到的效果没有英文版图片上的那么绚丽。做法: 1.在setting.py的INSTALL_APP下入'django.contrib.staticfiles'。 2.在setting.PY中加入 STATIC_ROOT = '/static/'一行,然后运行python manage.py collectstatic,这样会把安装在你的python目录下的django包中的css和js复制到你当前盘的根目录下的文件夹static中。 3.把上面得到的static文件夹移动到外层的mysite/下就好了。因为STATIC_URL是指明了找这些文件的路径。

http://www.djangobook.com/en/2.0/_images/book_edit 04-24 08:38

猪头哥哥 12-08 00:48

django确实很强大 集成了很多功能

test 03-08 15:03

django2.03,python3.6,直接verbose_name='中文',即可输出中文

对这一段的评论会显示在这里

图 6-13. 含filter_horizontal的book编辑页面

对这一段的评论会显示在这里

我们强烈建议针对那些拥有十个以上选项的多对多字段 使用filter_horizontal。 这比多选框好用多了。 你可以在多个字段上使用filter_horizontal,只需在这个元组中指定每个字段的名字。

对这一段的评论会显示在这里

ModelAdmin类还支持filter_vertical选项。 它像filter_horizontal那样工作,除了控件都是垂直排列,而不是水平排列的。 至于使用哪个,只是个人喜好问题。

Jeff 04-12 08:47

重新注册

对这一段的评论会显示在这里

filter_horizontalfilter_vertical选项只能用在多对多字段 上, 而不能用于 ForeignKey字段。 默认地,管理工具使用下拉框 来展现外键 字段。但是,正如多对多字段 那样,有时候你不想忍受因装载并显示这些选项而产生的大量开销。 例如,我们的book数据库膨胀到拥有数千条publishers的记录,以致于book的添加页面装载时间较久,因为它必须把每一个publishe都装载并显示在下拉框 中。

hughes 02-11 14:25

publishe -> publisher?

对这一段的评论会显示在这里

解决这个问题的办法是使用raw_id_fields 选项。它是一个包含外键字段名称的元组,它包含的字段将被展现成文本框 ,而不再是下拉框 。见图 6-14。

对这一段的评论会显示在这里
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',)**
猪头哥哥 12-08 02:58

在书的编辑页面可以看出 作者那里多了个数字id

对这一段的评论会显示在这里

图 6-14. 含raw_id_fields的book编辑页面

对这一段的评论会显示在这里

在这个输入框中,你输入什么呢? publisher的数据库ID号。 考虑到人们通常不会记住这些数据库ID,管理工具提供了一个放大镜图标方便你输入。点击那个图标将会弹出一个窗口,在那里你可以选择想要添加的publishe。

sephiroth 06-22 15:08

publishe 应该是 publisher

reader 09-08 08:39

图6-7到本页最下方的图都挂了

Lang 09-07 08:29

因为看不到图,也不知道这样是否正常:用放大镜打开新页面选择了以后,虽然输入框里的值变了,但是放大镜右侧的文本却不变?

treevivi 11-16 08:28

我照着这个做,可是看不到available框、chosen框,也看不到文本框,这里的图还挂了。郁闷阿~ 我在manytomany字段里添有blank=True,这个有影响吗

falcon_chen@qq.com 01-18 07:30

我觉得这个做得很不好,比如说选择后一般用户都是期待上屏的是选择时显示的值,可能把id放在隐藏框里比较好吧,另外右边的字段没有变化好像也不太好。

melzg 03-22 14:05

同样,ID号变了,但后面的文字没变。

melzg 03-22 14:09

同样,ID号变了,但后面的文字没变。当你保存后,再打开,这是文字就和ID号一致了。我认为这可以算是一个Bug。

王洁 07-02 09:07

新增时文本框内有ID,放大镜后无信息。修改时文本框内ID改变,但是放大镜后信息未改变。应该算是个bug

DC 12-11 13:00

LS的各位,放大镜后面显示的值应该的是当前的值,也就是原始值,当然不会跟着选择改变

Rex.Ye 01-10 02:10

貌似这个网站好久没有维护了吧,部分bug和图片都有问题,我想修正后转载到自己博客,当然会保留原有连接。不知道可不可以。

WildCat 05-14 03:02

这个。。放大镜并不是搜索的意思。而是新打开个窗口查找。

jasper 08-05 03:00

点击那个放大镜就会跳入新的页面,在那里会看到相应的ID号和publisher

jasper 08-05 03:07

点击那个放大镜就会跳入新的页面,在那里会看到相应的ID号和publisher,放大镜后面的是当时的publisher,确定之前是不会跟着所选的ID号改变的!!!LS误会了

Jahangir 08-17 12:28

为什么我的Admin界面好简陋,我看英文版网站的截图都好漂亮的

starbird 10-06 02:25

楼上,因为css与js都没加载。 在 settings.py的INSTALLED_APPS中加入django.contrib.staticfiles即可解决

adamee 05-22 02:33

setting.py/////import sys/// reload(sys)/// sys.setdefaultencoding('gbk')/////

mihello 08-07 13:31

@DC 正解

allen 09-21 00:18

WildCat正解。文本框没有查找功能,点开放大镜选择选项

周明辉 11-27 14:02

看到现在还是不能解决CSS没有加载的问题 上面的方法都试过了 求大神破啊

leslieyuan 01-21 15:02

@all我终于搞定了,因为admin管理站点的css和js没有加载,所以看到的效果没有英文版图片上的那么绚丽。做法: 1.在setting.py的INSTALL_APP下入'django.contrib.staticfiles'。 2.在setting.PY中加入 STATIC_ROOT = '/static/'一行,然后运行python manage.py collectstatic,这样会把安装在你的python目录下的django包中的css和js复制到你当前盘的根目录下的文件夹static中。 3.把上面得到的static文件夹移动到外层的mysite/下就好了。因为STATIC_URL是指明了找这些文件的路径。

starof 02-09 02:45

图可以参考 http://www.cnblogs.com/starof/p/4274116.html

Lionel.Shen 10-12 07:12

django1.10版本,为何我这么做了,admin页面没有反应? from django.contrib import admin from books.models import * class AuthorAdmin(admin.ModelAdmin): list_display = ('first_name', 'last_name', 'email') search_fields = ('first_name', 'last_name') class BookAdmin(admin.ModelAdmin): list_display = ('title', 'publisher', 'publication_date') list_filter = ('publication_date') ordering = ('-publication_date') class PublisherAdmin(admin.ModelAdmin): list_display = ('name','address','city','state_province','country','website') admin.site.register(Publisher) admin.site.register(Author) admin.site.register(Book) ~

对这一段的评论会显示在这里

用户、用户组和权限

对这一段的评论会显示在这里

因为你是用超级用户登录的,你可以创建,编辑和删除任何对像。 然而,不同的环境要求有不同的权限,系统不允许所有人都是超级用户。 管理工具有一个用户权限系统,通过它你可以根据用户的需要来指定他们的权限,从而达到部分访问系统的目的。

WYM 04-08 09:45

任何对像 --> 任何对象

jowett 01-30 09:42

从这一部分开始到本章结尾,所有的许可“permission”翻译为“权限”比较恰当

anti 04-06 03:21

为什么我添加一个用户然后logout之后就一直报错啊

FrankHe 08-02 06:58

可以删除自己登陆的那个账户吗

karee 09-30 10:28

@FrankHe : 可以的 然后你就没法登陆了 从新输入python manage.py createsuperuser 亲测 T_T

misutt 10-19 10:29

ls可爱~

对这一段的评论会显示在这里

用户帐号应该是通用的、独立于管理界面以外仍可以使用。但我们现在把它看作是管理界面的一部分。 在第十四章,我们将讲述如何把用户帐号与你的网站(不仅仅是管理工具)集成在一起。

对这一段的评论会显示在这里

你通过管理界面编辑用户及其许可就像你编辑别的对象一样。 我们在本章的前面,浏览用户和用户组区域的时候已经见过这些了。 如你所想,用户对象有标准的用户名、密码、邮箱地址和真实姓名,同时它还有关于使用管理界面的权限定义。 首先,这有一组三个布尔型标记:

对这一段的评论会显示在这里
  • 活动标志,它用来控制用户是否已经激活。 如果一个用户帐号的这个标记是关闭状态,而用户又尝试用它登录时,即使密码正确,他也无法登录系统。
  • 成员标志,它用来控制这个用户是否可以登录管理界面(即:这个用户是不是你们组织里的成员) 由于用户系统可以被用于控制公众页面(即:非管理页面)的访问权限(详见第十四章),这个标志可用来区分公众用户和管理用户。
  • 超级用户标志,它赋予用户在管理界面中添加、修改和删除任何项目的权限。 如果一个用户帐号有这个标志,那么所有权限设置(即使没有)都会被忽略。
对这一段的评论会显示在这里

普通的活跃,非超级用户的管理用户可以根据一套设定好的许可进入。 管理界面中每种可编辑的对象(如:books、authors、publishers)都有三种权限: 创建 许可, 编辑 许可和 删除 许可。 给一个用户授权许可也就表明该用户可以进行许可描述的操作。

jianzhen 11-10 07:42

“普通的活跃,非超级用户的……”——》“普通的‘已激活’,非超级用户的……”

adamee 05-22 02:57

“Normal” admin users – that is, active, non-superuser staff members – are granted admin access through assigned permissions.

对这一段的评论会显示在这里

当你创建一个用户时,它没有任何权限,该有什么权限是由你决定的。 例如,你可以给一个用户添加和修改publishers的权限,而不给他删除的权限。 请注意,这些权限是定义在模块级别上,而不是对象级别上的。据个例子,你可以让小强修改任何图书,但是不能让他仅修改由机械工业出版社出版的图书。 后面这种基于对象级别的权限设置比较复杂,并且超出了本书的覆盖范围,但你可以在Django documentation中寻找答案。

daixijaing 02-03 16:26

据(举)个例子

Doming 07-05 10:27

据个例子->举个例子

jeff 11-27 08:40

test

chifa 04-28 02:14

翻译得太地道了~~“小强”和“机械工业出版社”^o^~

zzm88 07-25 05:36

ls+1。。。看到小强马上喷了。。原文是JOHN:)

zzm88 07-25 05:40

据个例子,你可以让小强修改任何图书,但是不能让他仅修改由机械工业出版社出版的图书。 这句比较拗口我整理一下:你可以“让小强拥有修改所有书的权限吧!”,而不能“让小强只拥有修改机械工业出版社的图书的权限!”

lincy 08-16 13:10

ls翻译得甚好

dubug 08-17 02:40

模块级别,是数据表这一级。 而对象级别,则是QuerySet这一级。

adamee 05-22 03:00

so they let you say “John can make changes to any book,” but they don’t let you say “John can make changes to any book published by Apress.”

mr.liu 08-05 10:03

这里的对象级别指什么???

mr.liu 08-05 10:08

模块级别就是表,对象级别就是用户,是这样的么...???

caozj 05-27 12:00

模板级别就是book这些,对象级别就是模板的具体实现,(实例)

对这一段的评论会显示在这里

注释

对这一段的评论会显示在这里

权限管理系统也控制编辑用户和权限。 如果你给某人编辑用户的权限,他可以编辑自己的权限,这种能力可能不是你希望的。 赋予一个用户修改用户的权限,本质上说就是把他变成一个超级用户。

对这一段的评论会显示在这里

你也可以给组中分配用户。 一个 简化了给组中所有成员应用一套许可的动作。 组在给大量用户特定权限的时候很有用。

对这一段的评论会显示在这里

何时、为什么使用管理界面?何时又不使用呢?

对这一段的评论会显示在这里

经过这一章的学习,你应该对Django管理工具有所认识。 但是我们需要表明一个观点: 什么时候 为什么 用,以及什么时候又 用。

对这一段的评论会显示在这里

Django的管理界面对非技术用户要输入他们的数据时特别有用;事实上这个特性就是专门为这个 实现的。 在Django最开始开发的新闻报道的行业应用中,有一个典型的在线自来水的水质专题报道 应用,它的实现流程是这样的:

对这一段的评论会显示在这里
  • 负责这个报道的记者和要处理数据的开发者碰头,提供一些数据给开发者。
  • 开发者围绕这些数据设计模型然后配置一个管理界面给记者。
  • 记者检查管理界面,尽早指出缺少或多余的字段。 开发者来回地修改模块。
  • 当模块认可后,记者就开始用管理界面输入数据。 同时,程序员可以专注于开发公众访问视图和模板(有趣的部分)。
Eric 02-15 14:28

应该是“记着”

Anti-Eric 02-29 11:47

楼上的语文是体育老师交的.....

donly 03-08 08:36

。。。

melzg 03-22 14:24

:D

melzg 03-22 14:25

:D 楼上的歧视体育老师,这是不对的。

Rex.Ye 01-10 02:29

果然,二楼的语文是体育老师“交”的。:-D

匿名读者 04-05 09:46

.............

chu 07-08 06:58

一二楼的语文是体育老师“交”的,五楼是体育老师。

lincy 08-16 13:13

楼上正街

imlong 08-18 13:40

这楼真欢乐

coco 09-05 07:44

神码时候程序猿都这么寂寞了。。

terry 09-05 07:55

我不寂寞,我鸡寞

cjyfff 01-13 14:15

哈哈,看书枯燥了,笑一笑真好

匿名读者 07-18 08:48

hhh

Xavier 07-20 02:57

一楼二楼真欢乐

misutt 10-19 10:33

哈哈哈笑cry

baby4bamboo 12-04 13:52

半夜看书看到这个,突然有一些感动。。都是一群苦逼的程序员,为了梦想而奋斗着。。真好。。不知道,若干年后的自己,会是什么样子。

nemo 02-13 05:41

ls这就感动了,你去做艺术方面的东西多好。。不做管理光做程序没多大出路的

匿名读者 04-01 11:21

试想若干年后,再回到这里,看看当初的自己,是否会为之动容。看看前辈们的批注,就仿佛若干年后,看如今的自己,是否有种恍如隔世的感觉!

韦佳音 04-05 06:49

我会永远记住一、二楼

哈哈 07-07 09:39

哈哈。

adam 01-09 14:16

这楼必须mark

O(∩_∩)O哈哈哈~ 03-01 08:36

到此一笑……

看到当年的自己 08-05 02:56

江东帆影 12-29 08:16

你们永垂不朽

猪头哥哥 12-08 05:35

楼上好逗 明明就是记者 你们一个都跑不掉

刘家乐 02-08 10:35

小垃圾来看前辈们的批注了

藍藍 02-15 11:17

前辈们,我好苦,虽然都2022年了, 但是真的没有发现有什么Django的书籍能够有这本好,

对这一段的评论会显示在这里

换句话说,Django的管理界面为内容输入人员和编程人员都提供了便利的工具。

对这一段的评论会显示在这里

当然,除了数据输入方面,我们发现管理界面在下面这些情景中也是很有用的:

对这一段的评论会显示在这里
  • 检查模块* :当你定义好了若干个模块,在管理页面中把他们调出来然后输入一些虚假的数据,这是相当有用的。 有时候,它能显示数据建模的错误或者模块中其它问题。
  • 管理既得数据* :如果你的应用程序依赖外部数据(来自用户输入或网络爬虫),管理界面提供了一个便捷的途径,让你检查和编辑那些数据。 你可以把它看作是一个功能不那么强大,但是很方便的数据库命令行工具。
  • 临时的数据管理程序* :你可以用管理工具建立自己的轻量级数据管理程序,比如说开销记录。 如果你正在根据自己的,而不是公众的需要开发些什么,那么管理界面可以带给你很大的帮助。 从这个意义上讲,你可以把它看作是一个增强的关系型电子表格。
对这一段的评论会显示在这里

最后一点要澄清的是: 管理界面不是终结者。 过往许多年间,我们看到它被拆分、修改成若干个功能模块,而这些功能不是它所支持的。 它不应成为一个 公众 数据访问接口,也不应允许对你的数据进行复杂的排序和查询。 正如本章开头所说,它仅提供给可信任的管理员。 请记住这一点,它是有效使用管理界面的钥匙。

Changchun Chen 05-06 13:16

其中“我们看到它被拆分、修改成若干个功能模块,而这些功能不是它所支持的。”什么意思,怎么感觉前后矛盾啊?

chu 07-08 07:03

我就遇到了这种情况,管理系统在项目里被定位为终结者。

zzm88 07-25 06:22

“我们看到它被拆分、修改成若干个功能模块,而这些功能不是它所支持的。”原文是intended to serve ,就是说“它本不打算提供的功能”

HAL9000 05-12 18:40

看完想做一个信息管理系统,本来想说看完这章差不多就能做了,看来不能偷懒啊

对这一段的评论会显示在这里

下一章

对这一段的评论会显示在这里

到现在,我们已经创建了一些模块,并且为编辑数据配置了一个优秀的界面。 下一章 <../chapter07/>__ ,我们将转入到网站开发中最重要的部分: 表单的创建和处理。

wingxforce 07-21 10:11

HTML代码有错误好像

111 03-26 06:06

这是楼主故意留下来的互动。。一路走过来到这里,你应该懂得o(∩_∩)o 哈哈

michael 11-24 14:52

meat and potatoes 我觉得楼主可以直接翻译出来!!!

猪头哥哥 12-04 01:35

我先去官网看原版文档 之后再过来弄清一些问题

对这一段的评论会显示在这里