django

django admin站点管理

2018-08-19  本文已影响102人  陆_志东

创建管理员账户

python manage.py createsuperuser

注册模型类

使用admin.site.register(Question)就能注册一个模型类,但这样的是默认的模型,有时候我们需要做一些自定义选项,就需要再添加一个模型管理对象作为第二个参数admin.site.register(Question, QuestionAdmin).

--polls/admin.py文件
from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question_text']   --在编辑Question时可以编辑的字段

admin.site.register(Question, QuestionAdmin)
上面代码效果图
如果想要上面效果图的表单分成多个而不是一个可以使用fieldsets
polls/admin.py
from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date']}),
    ]   --在编辑Question时可以编辑的字段
--fieldsets 中每个元组的第一个元素是字段集的标题

admin.site.register(Question, QuestionAdmin)
上面代码效果图

给question添加关联的对象choise

添加的方式一 即默认的注册方式:这种方式效率不是太高,推荐方式二

polls/admin.py
from django.contrib import admin

from .models import Choice, Question
# ...
admin.site.register(Choice)
上面代码效果图
注意
上面效果图Question是一个选择下拉框,对应很多个choise对象,如果你想继续添加choise对象,可以点击右边的加号,点击之后就会弹出一个弹出框让你编辑choise对象,然后点击save保存

方式二:添加额外的模型管理对象

polls/admin.py
from django.contrib import admin

from .models import Choice, Question


class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3  --指定默认出现几个空白的choise编辑栏,且这三个默认的编辑栏无法被删除,即始终保持3个空白栏


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]   --在编辑Question时可以编辑的字段
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)
上面代码效果图

在现有的三个Choice的底部,你会发现一个“Add another Choice”的链接。 如果你点击它,就会增加一个新的空白Choice。 如果你想移除一个新增加的空白Choice,可以点击其右上角的X。 请注意,你无法移除那最初的三个空白Choice, 下面的图片展示新增加的一个空白Choice:


image

如果你觉得上面图片那样的按行显示,太占空间,可以使用按行列表格的方式显示,做法就是更改模型管理对象继承的父类即可,将StackedInline父类换为TabularInline父类

image

设置模型类对象的显示(上面的操作是编辑模型类的选项,下面是展示模型类的选项)

默认地,Django显示每个对象的str()返回的内容,即默认是返回python类的内建方法__str__()方法的返回值

image
我们可以使用list_display属性来扩充对象的显示字段,增加信息的内容展示
polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question_text', 'pub_date', 'was_published_recently')
image

你也可以添加一个过滤器list_filter来筛选出哪些对象可以显示

class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question_text', 'pub_date', 'was_published_recently')
    list_filter = ['pub_date']
image

也可以添加一个搜索功能search_fields

class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question_text', 'pub_date', 'was_published_recently')
    list_filter = ['pub_date']
    search_fields = ['question_text']
上一篇下一篇

猜你喜欢

热点阅读