xml地图|网站地图|网站标签 [设为首页] [加入收藏]

Django admin site(一)ModelAdmin Options,djangomodeladmin

时间:2020-01-04 21:40来源:计算机
Django admin site(一)ModelAdmin Options,djangomodeladmin Admin管理分界面是django的剑客级应用。它读取你情势中的元数据,然后提要求你八个强盛而且能够运用的分界面,网址管理者可以用它立时

Django admin site(一)ModelAdmin Options,djangomodeladmin

Admin管理分界面是django的剑客级应用。它读取你情势中的元数据,然后提要求你八个强盛而且能够运用的分界面,网址管理者可以用它立时向网址中增加内容。

要运用admin,能够依照上面包车型地铁步子:

运营python manage.py migrate提醒创立superuser后就足以访谈

ModelAdmin对象

register装饰器

register(*models[, site=django.admin.sites.site])

1.7中新扩大长。Model和ModelAdmin能够这么注册:

from django.contrib import admin
from .models import Author

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    pass

能够壹遍注册七个Model,而且能够采取自个儿定制的AdminSite:

from django.contrib import admin
from .models import Author, Reader, Editor
from myproject.admin_site import custom_admin_site

@admin.register(Author, Reader, Editor, site=custom_admin_site)
class PersonAdmin(admin.ModelAdmin):
    pass

Admin是何许行事的

当把'django.contrib.admin'添加到INSTALLED_APPS后,django会自动搜索各类app中的admin.py模块并且import载入。

class apps.AdminConfig
Django 1.7新增.
admin私下认可的AppConfig类.当django运转时会施行autodiscover(State of Qatar。

class apps.SimpleAdminConfig
Django 1.7新增.
就像于AdminConfig,不会实施autodiscover(卡塔尔.

autodiscover()
import每个app的admin.py模块。

Django 1.7改变:
在那前的本子中须要在urls.py中手动运营此方法去搜寻各类app的admin.py,1.7后AdminConfig会活动履行此措施。

只要正在使用定制的AdminSite,要求将ModelAdmin的子类载入到温馨的代码中并全部登记到定制的AdminSite中。这种情景下需求停止活动discovery(卡塔尔(قطر‎,能够将'django.contrib.admin.apps.SimpleAdminConfig'代替INSTALLED_APPS中的'django.contrib.admin'。

ModelAdmin选项

actions

admin actions的列表

actions_on_top
actions_on_bottom

action的位置。

date_hierarchy

将date_hierarchy设成Model的DateField大概DateTime菲尔德,就足认为admin中的此Model加多日期等级次序。

fields

exclude

决定Model的form中显现如何字段。田野同志s是包含,exclude是打消。

from django.contrib import admin

class AuthorAdmin(admin.ModelAdmin):
    fields = ('name', 'title')

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

能够将有些字段放在同等行,如下url和title字段放在同样行:

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

fieldsets

田野sets是双元元组(name, 田野同志_options卡塔尔(قطر‎的列表,能够将字段分块:

from django.contrib import admin

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

name是块的标题,田野同志_options是贰个词典。

field_options的key有上面三种:

  fields

字段名称的元组,在田野同志set中呈现

{
'fields': (('first_name', 'last_name'), 'address', 'city', 'state'),
}

  classes

提须要田野set的额外CSS类的列表。

  description

能够在田野同志set最上部额外出示的文书。

filter_horizontal
filter_vertical

Model有ManyToManyField字段时,使用filter_horizontal,filter_vertical能够从现存的选项中多选。二个为横排,二个为竖排。

form

采取的表单。

from django import forms
from django.contrib import admin
from myapp.models import Person

class PersonForm(forms.ModelForm):

    class Meta:
        model = Person
        exclude = ['name']

class PersonAdmin(admin.ModelAdmin):
    exclude = ['age']
    form = PersonForm

爆发冲突时,ModelAdmin优先。上边包车型大巴例证中age会被清除,但name会在页面中呈现。

formfield_overrides

能够覆盖Model表单分界面包车型地铁有的字段的选项,为局地一定项目标字段增添自身定制的预制零器件

譬如说,想为自己Model的TextField字段使用富文本编辑器:

from django.db import models
from django.contrib import admin

# Import our custom widget and our model from where they're defined
from myapp.widgets import RichTextEditorWidget
from myapp.models import MyModel

class MyModelAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.TextField: {'widget': RichTextEditorWidget},
    }

list_display

Model的change list页面能够显得的字段,即使不安装list_display,admin分界面会自动显示Model的__unicode__()结果。

 list_display中有4种值:

  • model的多个字段

    list_display = ('first_name', 'last_name')
    
  • 多少个可调用的以model为参数的函数

    def upper_case_name(obj):
        return ("%s %s" % (obj.first_name, obj.last_name)).upper()
    upper_case_name.short_description = 'Name'
    
    class PersonAdmin(admin.ModelAdmin):
        list_display = (upper_case_name,)  
    
  • ModelAdmin的壹天性能,雷同于可调用函数

    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'
    
  • Model的三个属性,相像于可调用函数

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

    Note:

  • 借使字段是ForeignKey,会显得外键的__unicode__。

  • 不支持ManyToManyField
  • 如果是BooleanField,会显示on或者off。
  • 假使提供的字符串是Model可能ModelAdmin的艺术照旧五个可调用函数,django会自动的HTML-escape输出,借使不想转义,能够将艺术的allow_tags设为True。为了制止XSS跨站攻击,须求接纳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('from django.db import models
    from django.contrib import admin
    
    class Person(models.Model):
        first_name = models.CharField(max_length=50)
        birthday = models.DateField()
    
        def born_in_fifties(self):
            return self.birthday.strftime('%Y')[:3] == '195'
        born_in_fifties.boolean = True
    
    class PersonAdmin(admin.ModelAdmin):
        list_display = ('name', 'born_in_fifties') 
    
  • Model的__str__或者__unicode__方法也基本上能用

    list_display = ('__str__', 'some_other_field')
    
  • 如果list_display中的项不是数据库的骨子里字段,那么不能以此项排序。反之,则足以以此项排序,能够因而安装 admin_order_田野(field卡塔尔国属性提议这些真相。

    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)
        color_code = models.CharField(max_length=6)
    
        def colored_first_name(self):
            return format_html('colored_first_name.admin_order_field = '-first_name'
    
  • list_display中的项也足以是特色:

    class Person(object):
        first_name = models.CharField(max_length=50)
        last_name = models.CharField(max_length=50)
    
        def my_property(self):
            return self.first_name + ' ' + self.last_name
        my_property.short_description = "Full name of the person"
    
        full_name = property(my_property)
    
    class PersonAdmin(admin.ModelAdmin):
        list_display = ('full_name',)    
    

list_display_link

其间的字段会被链接到mode的change页面

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

list_editable

内部的字段在change list页面是能够被校订的。在内部的字段也非得在list_display中。

list_filter

中间的字段能够作为过滤器过滤model 。能够是相关域。

class PersonAdmin(admin.UserAdmin):
    list_filter = ('company__name',)

list_max_show_all

show all页面上的model数目,缺省200。

list_per_page

每个change list页面的model数目,缺省100。

list_select_related

与select_related()有关。

ordering

排序。

paginator

选取的分页。缺省django.core.paginator.Paginator 。

prepopulated_fields

预置字段。

radio_fields

使用radio-button代替select-box( ForeignKey或者有choices选项时)。

class PersonAdmin(admin.ModelAdmin):
    radio_fields = {"group": admin.VERTICAL}

raw_id_fields

展销会示在那之中字段的id,用于ForeignKey可能ManyToManyField。

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

readonly_fields

只可读不可编辑的字段。也能够是艺术:

from django.contrib import admin
from django.utils.html import format_html_join
from django.utils.safestring import mark_safe

class PersonAdmin(admin.ModelAdmin):
    readonly_fields = ('address_report',)

    def address_report(self, instance):
        # assuming get_full_address() returns a list of strings
        # for each line of the address and you want to separate each
        # line by a linebreak
        return format_html_join(
            mark_safe('<br/>'),
            '{0}',
            ((line,) for line in instance.get_full_address()),
        ) or "I can't determine this address."

    # short_description functions like a model field's verbose_name
    address_report.short_description = "Address"
    # in this example, we have used HTML tags in the output
    address_report.allow_tags = True

save_as

设为Ture时,change页面包车型地铁 "Save and add another"按键会被"Save as"代替。

save_on_top

设为Ture时,change页面包车型地铁上边也可能有save开关。

search_fields

可检索字段。

view_on_site

是还是不是出示View on site链接。

template options

一些定制admin模板时内定模板所用的选项。

add_form_template
add_view(卡塔尔(قطر‎使用的模板.

change_form_template
change_view(卡塔尔国使用的模板.

change_list_template
changelist_view(State of Qatar使用的模板.

delete_confirmation_template
delete_view(卡塔尔使用的模板。

delete_selected_confirmation_template
delete_selected action method 使用的模版。

ModelAdmin.object_history_template
history_view(卡塔尔使用的沙盘,日志。

 

为啥只好够在Python27Libsite-packagesdjangobin目录下利用django-adminpy startproject?

您能够试试把
"C:Python27;C:Python27Scripts;"参加 path 中,那样你就无需单独把每二个安装在 site-packages 目录下东西增加到 path 中。

 

Django中输入django-adminpy startproject mysite后未有新建项目同风还没有别的影响,那该怎化解?

在django符合规律安装的事态下,
看下有未有权力,系统有没有隐形的同名文件夹。
django-admin.py startproject mysite > 1.txt ,看下Log  

admin site(风姿罗曼蒂克卡塔尔国ModelAdmin Options,djangomodeladmin Admin管理分界面是django的徘徊花级应用。它读取你方式中的元数据,然后提要求您三个强有力并且可...

编辑:计算机 本文来源:Django admin site(一)ModelAdmin Options,djangomodeladmin

关键词: