django开发(5)后台开发

使用django的后台管理

1.创建一个管理员用户

python manage.py createsuperuser, 按提示输入用户名,邮箱,密码


接着python manage.py runserver启动服务器,通过127.0.0.1:8000/admin访问,输入上面的用户名,邮箱,密码

进入管理站点,默认可以对groups、users进行管理




2.如果想将后台改为中文

可在setting.py 里将 LANGUAGE_CODE = 'en-us' 改为'zh-hans'

另外还可以设置时区 TIME_ZONE = ‘Asia/Shanghai’


3.想在后台看到数据库数据,需要向admin注册booktest的模型


打开booktest/admin.py 文件,注册模型


from django.contrib import admin

from models import BookInfo

admin.site.register(BookInfo)


刷新管理页面,可以对BookInfo的数据进行增删改查操作

问题:如果在str方法中返回中文,在修改和添加时会报ascii的错误

解决:在str()方法中,将字符创末尾添加“.encode(‘utf-8’)”




4.自定义管理页面

Django提供了admin.ModelAdmin类

通过定义ModelAdmin的子类,来定义模型在Admin界面的显式方式


class QuestionAdmin(admin.ModelAdmin):

   ...

admin.site.register(Question,QuestionAdmin)


list_display :显示字段,可以点击列头进行排序

list_display = ['pk','bittle','bpub_date']


list_filter:过滤字段,过滤框会出现在右侧

list_filter = ['bittle']

search_fields:搜索字段,搜索框会出现在上侧

search_fields = ['bittle']

list_per_page:分页,分页框会出现在下侧

list_per_page =10



例如:

在admin.py 里


from django.contrib import  admin

from models import*


class BookInfoAdmin(admin.ModleAdmin):

         list_display = ['id','btitle','bpub_date']


admin.site.register(BookInfo,BookInfoAdmin)

admin.site.register(HeroInfo)


这样后台数据就显示为

id    btitle     bpub_date 

1      abc       2017/10/7 11:02

2      haha    2017/10/7 11:02






添加、修改页属性

fields:属性的先后顺序

fields = ['bpub_date','btitle']


fieldsets:属性分组

fieldsets = [

    ('basic',{'fields':['btitle']}),

    ('more',{'fields':['bpub_date']}),

]


5.关于关联对象的操作

对于HeroInfo模型类,有两种注册方式

方式一:与BookInfo模型类相同

方式二:关联注册

按照BookInfo的注册方式完成HeroInfo的注册

接下来实现关联注册


from django.contrib import admin

from models import BookInfo,HeroInfo


class HeroInline(admin.StackedInline):

           model = HeroInfo

           extra =2 (额外嵌入2个HeroInfo类)

class BookInfoAdmin(admin.ModelAdmin):

           list_display = ['id','btitle','bpub_date']

           inlines = [HeroInfoInline] (在BookInfo里嵌入两个HeroInfo)


admin.site.register(BookInfo,BookInfoAdmin)

admin.site.register(HeroInfo)

可以将内嵌的方式改为表格

class HeroInfoInline(admin.TabularInline)





你可能感兴趣的:(django开发(5)后台开发)