一:介绍

  通过django admin可以快速生成后台管理功能。

二:设置

  工程同名下settings.py

  1)在INSTALLED_APPS中增加django.contrib.admin

  2)在INSTALLED_APPS 中增加

    django.contrib.auth

    django.contrib.contenttypes

    django.contrib.messages

    django.contrib.sessions

    django.contrib.admin依赖上面包

  3)在context_processors中

    django.contrib.auth.context_processors.auth

    django.contrib.messages.context_processors.messages

   在MIDDLEWARE,TEMPLATES中增加

    django.contrib.auth.middleware.AuthenticationMiddleware

    django.contrib.messages.middleware.MessageMiddleware

  上面都是默认配置好的

  4)在INSTALLED_APPS中增加自己的应用

  5)创建ModelAdmin

  6)ModelAdmin注册到AdminSite

  7)urls.py中配置

        from django.contrib import admin
admin.autodiscover()
# And include this URLpattern...
urlpatterns = patterns('',
# ...
(r'^admin/', include(admin.site.urls)),
# ...
)

三:ModelAdmin

  ModelAdmin是admin接口,在app下面建立admin.py

  示例

方式1:可以定制显示
from django.contrib import admin
from myproject.myapp.models import Author class AuthorAdmin(admin.ModelAdmin):
pass
admin.site.register(Author, AuthorAdmin) 方式2:默认
from django.contrib import admin
from myproject.myapp.models import Author admin.site.register(Author)

四:ModelAdmin常用选项

  1)model action

    ModelAdmin.actions 

    ModelAdmin.actions_on_top #处理动作在上面显示

    ModelAdmin.actions_on_bottom 处理动作在下面显示#默认(actions_on_top = True; actions_on_bottom = False).

    ModelAdmin.actions_selection_counter #动作列表select来显示 默认(actions_selection_counter = True)

  2)ModelAdmin.date_hierarchy 处理日期类型DateField or DateTimeField 添加和修改数据会显示下拉日期

   示例:  

date_hierarchy = 'pub_date'
date_hierarchy = 'author__pub_date' #author类下的pub_date字段

  3)ModelAdmin.empty_value_display 空值或者None 显示

from django.contrib import admin

class AuthorAdmin(admin.ModelAdmin):
empty_value_display = '-empty-' from django.contrib import admin class AuthorAdmin(admin.ModelAdmin):
fields = ('name', 'title', 'view_birth_date') def view_birth_date(self, obj):
return obj.birth_date view_birth_date.empty_value_display = '???'

  4)ModelAdmin.exclude 不显示的字段 

class AuthorAdmin(admin.ModelAdmin):
exclude = ('birth_date',)

  5)ModelAdmin.fields 增加或者编辑时显示的字段  

class FlatPageAdmin(admin.ModelAdmin):
fields = ('url', 'title', 'content')

  6)ModelAdmin.fieldsets 增加或者编辑页面显示组 

from django.contrib import admin

class FlatPageAdmin(admin.ModelAdmin):
fieldsets = (
(None, {
'fields': ('url', 'title', 'content', 'sites')
}),
('Advanced options', {
'classes': ('collapse',),
'fields': ('registration_required', 'template_name'),
}),
)

  7)ModelAdmin.filter_horizontal ,ModelAdmin.filter_vertical 多对多关系水平多选select

  8)ModelAdmin.list_display  列表数据显示的列  

#方式1
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name') #方式2
class PersonAdmin(admin.ModelAdmin):
list_display = ('upper_case_name',) def upper_case_name(self, obj):
return ("%s %s" % (obj.first_name, obj.last_name)).upper()
upper_case_name.short_description = 'Name' #方式3
from django.db import models
from django.contrib import admin class Person(models.Model):
name = models.CharField(max_length=50)
birthday = models.DateField() def decade_born_in(self):
return self.birthday.strftime('%Y')[:3] + "0's"
decade_born_in.short_description = 'Birth decade' class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'decade_born_in')

  备注:  1.ForeignKey显示的__str__中的内容

      2 .ManyToManyField 不直接支持,需要自定义方法显示

      3. BooleanField  NullBooleanField 会显示on,off代替True,False

      4. 显示内容有html,需要在model中实现format_html()方法  

from django.db import models
from django.contrib import admin
from django.utils.html import format_html class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
color_code = models.CharField(max_length=6) def colored_name(self):
return format_html(
'<span style="color: #{};">{} {}</span>',
self.color_code,
self.first_name,
self.last_name,
) class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'colored_name')

  9)ModelAdmin.list_display_links 那些字段点击进入编辑页面(字段必须在list_display中)

class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'birthday')
list_display_links = ('first_name', 'last_name')

  10)ModelAdmin.list_editable 增加或者编辑多行编辑text

  11)ModelAdmin.list_filter 数据列表中的过滤字段,支持BooleanFieldCharFieldDateFieldDateTimeFieldIntegerFieldForeignKey or ManyToManyField

class PersonAdmin(admin.ModelAdmin):
list_filter = ('is_staff', 'company') a class inheriting from django.contrib.admin.SimpleListFilter, which you need to provide the title and parameter_name attributes to and override the lookups and queryset methods, e.g.: from datetime import date from django.contrib import admin
from django.utils.translation import gettext_lazy as _ class DecadeBornListFilter(admin.SimpleListFilter):
# Human-readable title which will be displayed in the
# right admin sidebar just above the filter options.
title = _('decade born') # Parameter for the filter that will be used in the URL query.
parameter_name = 'decade' def lookups(self, request, model_admin):
"""
Returns a list of tuples. The first element in each
tuple is the coded value for the option that will
appear in the URL query. The second element is the
human-readable name for the option that will appear
in the right sidebar.
"""
return (
('80s', _('in the eighties')),
('90s', _('in the nineties')),
) def queryset(self, request, queryset):
"""
Returns the filtered queryset based on the value
provided in the query string and retrievable via
`self.value()`.
"""
# Compare the requested value (either '80s' or '90s')
# to decide how to filter the queryset.
if self.value() == '80s':
return queryset.filter(birthday__gte=date(1980, 1, 1),
birthday__lte=date(1989, 12, 31))
if self.value() == '90s':
return queryset.filter(birthday__gte=date(1990, 1, 1),
birthday__lte=date(1999, 12, 31)) class PersonAdmin(admin.ModelAdmin):
list_filter = (DecadeBornListFilter,)

  注:

    1.django.contrib.admin.FieldListFilter

    2. RelatedOnlyFieldListFilter

  

a tuple, where the first element is a field name and the second element is a class inheriting from django.contrib.admin.FieldListFilter, for example:

class PersonAdmin(admin.ModelAdmin):
list_filter = (
('is_staff', admin.BooleanFieldListFilter),
)
You can limit the choices of a related model to the objects involved in that relation using RelatedOnlyFieldListFilter: class BookAdmin(admin.ModelAdmin):
list_filter = (
('author', admin.RelatedOnlyFieldListFilter),
)

  12)ModelAdmin.list_max_show_all 数据列表,最多显示多少行(总行),默认200行

  13)ModelAdmin.list_per_page 数据列表每页显示多少行

  14)ModelAdmin.list_select_related 

  

class ArticleAdmin(admin.ModelAdmin):
list_select_related = ('author', 'category')
will call select_related('author', 'category'). If you need to specify a dynamic value based on the request, you can implement a get_list_select_related() method.

  15)ModelAdmin.ordering 数据列表,排序字段

  16)ModelAdmin.radio_fields django 默认显示的是choice,可以修改成radio

  

class PersonAdmin(admin.ModelAdmin):
radio_fields = {"group": admin.VERTICAL}
You have the choice of using HORIZONTAL or VERTICAL from the django.contrib.admin module. Don’t include a field in radio_fields unless it’s a ForeignKey or has choices set.

  17) ModelAdmin.raw_id_fields django默认ForeignKey显示的是select,可以修改成input搜索

  

class ArticleAdmin(admin.ModelAdmin):
raw_id_fields = ("newspaper",)

  18)ModelAdmin.readonly_fields 不可编辑字段,django默认是可以编辑的

  19)ModelAdmin.search_fields  数据列表 可以搜索的字段

可以是char,text,也可以是foreignkey,manytomany,

search_fields = ['foreign_key__related_fieldname']

四:ModelAdmin常用方法

  1)ModelAdmin.save_model 

from django.contrib import admin

class ArticleAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.user = request.user
super().save_model(request, obj, form, change)

  2)ModelAdmin.delete_model

  3)ModelAdmin.save_formset

class ArticleAdmin(admin.ModelAdmin):
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for obj in formset.deleted_objects:
obj.delete()
for instance in instances:
instance.user = request.user
instance.save()
formset.save_m2m()

  4)ModelAdmin.get_ordering(request)

class PersonAdmin(admin.ModelAdmin):

    def get_ordering(self, request):
if request.user.is_superuser:
return ['name', 'rank']
else:
return ['name']

  5)ModelAdmin.get_search_results

class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'age')
search_fields = ('name',) def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super().get_search_results(request, queryset, search_term)
try:
search_term_as_int = int(search_term)
except ValueError:
pass
else:
queryset |= self.model.objects.filter(age=search_term_as_int)
return queryset, use_distinct

五:ModelAdmin可以自定义模板

  ModelAdmin.add_form_template  add_view()

  ModelAdmin.change_form_template  change_view()

  ModelAdmin.change_list_template  changelist_view()

  ModelAdmin.delete_confirmation_template  delete_view()

  ModelAdmin.delete_selected_confirmation_template delete_selected

  ModelAdmin.object_history_template history_view()

  odelAdmin.popup_response_template response_add()response_change(), and response_delete()

  

41)django-admin的更多相关文章

  1. django admin 设置(转载https://www.cnblogs.com/wumingxiaoyao/p/6928297.html)

    Django admin 一些有用的设置   Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸 ...

  2. DJANGO ADMIN 一些有用的设置(转)

    DJANGO ADMIN 一些有用的设置   Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸 ...

  3. django admin 使用

    Django admin 中一些常用的设置 Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸索 ...

  4. 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题

    配置Django Admin,关于如何启用请参考Django官方文档<Activate the admin site>.但是我在配置过程中登录http://example.com/admi ...

  5. Django admin操作

      无名小妖     昵称:无名小妖园龄:1年6个月粉丝:22关注:1 +加关注 搜索     常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 我的标签 Python(1) python3 ...

  6. Django admin美化插件suit应用[原创]

    前言 由于比较懒,自己弄了一个用户验证,没有自己写后台,用了django自带的user认证,并通过admin直接进行管理,但默认的admin并不漂亮,于是使用了这个django-suit插件,效果对比 ...

  7. Django admin 权威指南(一)

    版本: Django 1.10 此部分由官方文档<6.5.1 The Django admin site>翻译而来. 6.5.1.1 概览 默认情况下,使用startproject的时候, ...

  8. Django admin 显示图片

    我有一个表用来储存轮播图片,有一个 `picture` 字段储存的是图片的url,图片的 url 通过上传文件到 cdn 获得.目前这个表的编辑是通过自定义一个 `ModelForm`,然后重写 Dj ...

  9. [系统开发] Django Admin上传图片简单校验

    我的 models里有个ImageField字段,用来保存用户头像,希望通过Django Admin上传时校验头像大小,如果太大就报错,并且不保存. 网上有不少方法,有的通过第三方软件实现,有的通过自 ...

  10. SQLAlchemy连接数据库并在django admin显示

    SQLAlchemy 0.7     postgersql  9.0 SQLAlchemy连接数据库有两种方法,一种是classic,一种是modern 1,modern方法 from sqlalch ...

随机推荐

  1. C++ 出现异常“.... \debug_heap.cpp Line:980 Expression:__acrt_first_block==header"

    本人是在写dll项目中出现了这个问题,经过一天的研究,尝试了三个步骤1.在配置属性->常规->MFC的使用中,将在静态库中使用MFC改为在共享DLL中使用MFC.但是还会出错2.原因是dl ...

  2. C++解决case中不能定义局部变量问题

    case Operation::DeviceAuthen: { std::string token = root["body"]["token"].asStri ...

  3. C#子类重写父类函数的两种方法

    (1)使用Virtual关键字Override从写 父类子类代码如下,不能修改public 为其它权限 public virtual void Clear() { UpdateView(); } pu ...

  4. 深度学习 ——style reconstruction

    多层神经网络的实质就是为了找出更复杂,更内在的features...图像的style, how to describe, impossible! 但是人眼却可以分辨. (参考论文 A Neural a ...

  5. PHP设计——单例模式与工厂模式

    一.单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的.所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记为pri ...

  6. java设计模式之单例模式以及实现的几种方法

    java设计模式以及实现的几种方法,看到比较好的博客文章,收藏起来供以后再次阅读.. 参见:http://www.cnblogs.com/garryfu/p/7976546.html

  7. CF961G Partitions

    传送门 luogu 显然每个数的贡献可以一起算感性理解一下,于是答案就是权值总和乘以每个数被算了几次 那个"集合大小为\(|S|\)的集合权值为权值和乘\(|S|\)",可以看成一 ...

  8. css3 特效拓展 画个安卓机器人

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. thinkpad e系列 装win7过程

    电脑买回来时是win8系统,但是卡顿的厉害,装成win7,win8装win7流程还是比较复杂,后来又装成xp,现在又改成win7,记录一下装win7 的过程 我是用光盘安装的系统 第一步:进入boss ...

  10. C/C++ assert()函数用法总结

    1. 简介 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行. 原型定义: #include <assert.h>void ass ...