zhumengke

本次模板

from django.db import models

class BookInfo(models.Model):
    btitle = models.CharField(max_length=30)
    bpub_date = models.DateField()

    def __str__(self):
        return self.btitle

class HeroInfo(models.Model):
    hname = models.CharField(max_length=30)
    hgender = models.BooleanField(default=False)
    hbook = models.ForeignKey(to=BookInfo,on_delete=\'cascade\')
  

Django 后台登录

1、创建一个管理员用户

python manage.py createsuperuser

2、管理界面本地化

#编辑settings.py文件,设置编码、时区
LANGUAGE_CODE = \'zh-Hans\'
TIME_ZONE = \'Asia/Shanghai\'

3、浏览器访问

127.0.0.1:8000/admin

自定义管理页面

1、Django提供了admin.ModelAdmin类,通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式

from django.contrib import admin

class HeroInfoInline(admin.StackedInline):
    model = HeroInfo
    extra = 2
class BookInfoAdmin(admin.ModelAdmin):
    list_display = [\'pk\', \'btitle\', \'bpub_date\']
    list_filter = [\'btitle\']
    search_fields = [\'btitle\']
    list_per_page = 3
    # fields = [\'pk\',\'bpub_date\', \'btitle\']
    fieldsets = [
        (\'basic\', {\'fields\': [\'btitle\']}),
        (\'more\', {\'fields\': [\'bpub_date\']}),
    ]
    inlines = [HeroInfoInline]

2、打开booktest/admin.py文件,向admin注册ModelAdmin

使用admin.site.register()

from django.contrib import admin
from .models import *

admin.site.register(BookInfo,BookInfoAdmin)

使用装饰器@admin.register()

@admin.register(HeroInfo)
class HeroInfoAdmin(admin.ModelAdmin):
    list_display = (\'hname\', \'hgender\', \'common\', \'hbook\')
    search_fields = [\'hname\',\'hbook__btitle\']

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

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

列表页属性

list_display:显示字段,可以点击列头进行排序 list_display = [\'pk\', \'btitle\', \'bpub_date\']

list_filter:过滤字段,过滤框会出现在右侧 list_filter = [\'btitle\']

search_fields:搜索字段,搜索框会出现在上侧 search_fields = [\'btitle\']

list_per_page:分页,分页框会出现在下侧 list_per_page = 10 添加、修改页属性

fields:属性的先后顺序 fields = [\'bpub_date\', \'btitle\']

fieldsets:属性分组 fieldsets = [ (\'basic\',{\'fields\': [\'btitle\']}), (\'more\', {\'fields\': [\'bpub_date\']}), ]

inlines:关联注册(可以将内嵌的方式改为表格 class HeroInfoInline(admin.TabularInline))

search_fields关联查询,关联对象__关联对象属性

@admin.register(HeroInfo)
class HeroInfoAdmin(admin.ModelAdmin):
    list_display = (\'hname\', \'hgender\', \'common\', \'hbook\')
    search_fields = [\'hname\',\'hbook__btitle\']

 

3、布尔值的显示

发布性别的显示不是一个直观的结果,可以使用方法进行封装

class HeroInfo(models.Model):
    hname = models.CharField(max_length=30)
    hgender = models.BooleanField(default=False)
    hbook = models.ForeignKey(to=BookInfo,on_delete=\'cascade\')
    def gender(self):
        if self.hgender:
            return \'\'
        else:
            return \'\'
    gender.short_description = \'性别\'

 

     

分类:

技术点:

相关文章: