首页 > 其他分享 >Django关于站点管理Admin Site的常见问题解决方法

Django关于站点管理Admin Site的常见问题解决方法

时间:2023-02-07 14:32:47浏览次数:44  
标签:常见问题 name Admin Site site admin models 模块 True


1. 改变django默认语言的方法?

仅需添加’django.middleware.locale.LocaleMiddlewar’到 MIDDLEWARE_CLASSES设置中,并确保它在’django.contrib.sessions.middleware.SessionMiddleware’* 之后* 。

2. 怎样将已有models加入到admin管理中?

本问题用实例演示,假如有个app叫做books,该app包里包含3个模块Publisher、Author和Book,以下是将该三个模块添加到admin管理中的步骤:

在 books 目录下( mysite/books ),创建一个文件: admin.py

在admin.py中输入以下代码

from django.contrib import admin

from mysite.books.models import Publisher, Author, Book

#以下3句,实现将模块添加到后台管理

admin.site.register(Publisher)

admin.site.register(Author)

admin.site.register(Book)

3) 重启服务器,刷新后台界面(比如​​http://127.0.0.1:8000/admin​​)发现添加成功


3. 为什么用admin.site.register(x)注册了x模块,后台却无法显示?

admin后台管理模块,第一步是执行autodiscover函数,该函数是根据settings.INSTALLED_APPS来逐个处理每个模块的,注册了模块却无法生效,肯定是因为没有将模块添加到配置文件的INSTALLED_APPS中。

以下是autodiscover关于注册模块的部分代码


for app in settings . INSTALLED_APPS :

mod = import_module ( app )
# Attempt to import the app's admin module.

try :

before_import_registry = copy . copy ( site . _registry )

import_module ( '%s.admin' % app )


 

4. 为什么我没有写admin.py,后台却默认显示了Auth的Groups和Users两个模块?

这是因为:

1) 我们在INSTALLED_APPS增加了’django.contrib.auth’选项,admin.autodiscover会去该包查找admin.py

2) 在django的源码包django.contrib.auth里面,我们找到了admin.py,并且里面刚好注册了Groups和Users两个模块

看代码:


admin . site . register ( Group , GroupAdmin )

admin . site . register ( User , UserAdmin )

 

又比如后台默认页显示了sites模块,找到contrib.sites,也可以发现admin.py,以下是它的内容:


from django . contrib import admin

from django . contrib . sites . models import Site

class SiteAdmin ( admin . ModelAdmin ) :

list_display = ( 'domain' , 'name' )

search_fields = ( 'domain' , 'name' )

admin . site . register ( Site , SiteAdmin )

 

其实不难发现,contrib里面的包,大部分都自含admin.py文件,这也就是说,只要在INSTALLED_APPS中添加了该目录中的某个包,后台就能够对它进行管理了。

5. 怎样让某个表单字段是可选填写的?

想要哪个字段是可选填写的,就在该Model的该字段的选项中(括号内)加上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 )


 

所有的字段,默认blank=false,所以都是必填不能为空的

6. 设置日期型和数字型字段可选的方法?

Django生成CREATE TABLE语句自动为每个字段显式加上NOT NULL,在管理工具中,如果你留空一个字符型字段,它会为此插入一个空字符串(而* 不是*NULL),但是,其它数据类型有例外:日期型、时间型和数字型字段不接受空字符串。

如果你想允许一个日期型(DateField、TimeField、DateTimeField)或数字型(IntegerField、DecimalField、FloatField)字段为空,你需要使用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 )



 

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

7. 怎样更改表单中字段的说明文字?

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


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' )

 

8. ModelAdmin类是干什么的?

像blank=True、null=True和verbose_name修改其实是模块级别,而不是管理级别的。 也就是说,这些修改实质上是构成模块的一部分,并且正好被管理工具使用,而不是专门针对管理工具的。

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

9. 怎样自定义后台管理的列表页面?

看代码和解释:


#怎样自定义列表页面?

class AuthorAdmin ( admin . ModelAdmin ) :

#列表页,列表顶部显示的字段名称

list_display = ( 'first_name' , 'last_name' , 'email' )

#列表页出现搜索框,参数是搜索的域

search_fields = ( 'first_name' , 'last_name' )

#右侧会出现过滤器,根据字段类型,过滤器显示过滤选项

list_filter = ( 'publication_date' , )

#页面中的列表顶端会有一个逐层深入的导航条,逐步迭代选项

date_hierarchy = 'publication_date'

#自然是排序所用了,减号代表降序排列

ordering = ( '-publication_date' , )


#将Author模块和管理类绑定在一起,注册到后台管理
admin . site . register ( Author , AuthorAdmin )

 

10. 怎样自定义编辑后台管理的表单页面?

#以下显示怎样自定义表单编辑页面的显示,注意它和列表页是在一个Admin类内部的

class BookAdmin ( admin . ModelAdmin ) :

#
# 这里可以写一些列表页面自定义选项
#
# 以下是表单编辑页面自定义选项
# 表单编辑页面,字段显示的顺序,如果没有某个选项,就不会显示
fields = ( 'title' , 'authors' , 'publisher' , 'publication_date' )
# 有了该设定,表单中该选项,变成了一个用JS动态选择的选择框,就是左右两列\
# 左边选择,右边显示被选中的内容,
# 强烈建议针对那些拥有十个以上选项的"多对多字段"使用filter_horizontal
filter_horizontal = ( 'authors' , )
# 用于外键,并且外键超级多的时候,是一个包含外键字段名称的元组,
# 它包含的字段将被展现成`` 文本框`` ,而不再是`` 下拉框``
raw_id_fields = ( 'publisher' , )

标签:常见问题,name,Admin,Site,site,admin,models,模块,True
From: https://blog.51cto.com/peishuai/6042096

相关文章