Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Django学习总结(四) #64

Open
PyxYuYu opened this issue Dec 9, 2016 · 0 comments
Open

Django学习总结(四) #64

PyxYuYu opened this issue Dec 9, 2016 · 0 comments
Labels

Comments

@PyxYuYu
Copy link
Owner

PyxYuYu commented Dec 9, 2016

In books lies the soul of the whole past time.

Django

  • Django Blog 学习总结
    • Django Tips
      • Django Admin 后台
        • 更改后台语言,设置中文
          • 方法一:在 settings.py 中的 MIDDLEWARE_CLASSES 内添加
            • django.middleware.locale.LocaleMiddleware
              • 确保在添加在 django.contrib.sessions.middleware.SessionMiddleware 后面
          • 方法二:在 settings.py 中修改
            • LANGUAGE_CODE = 'zh-Hans' (这里 Django 1.9.6 升级之后就修改了本地化中文的名字 )
        • 将数据模型 Models 添加入 Admin 后台中
          • app 文件夹下的 admin.py 中添加
            # xxxx 是models.py中类的名字
            admin.site.register(xxxx)
          • Admin 后台中,外键 ForeignKey一对多,多对一 )字段用一个选择框显示, 多对多 则用多选择框显示
          • Admin 后台管理字段时,有个限制,即每个字段必须填写,不能是可选填的情况,如果需要实现选填的话,需要修改 models.py 中字段的定义
            class Post(models.Model):
                email = models.EmailField(blank=True)
          • models.py 中所有字段默认 blank=False ,即不允许输入空值
          • 在数据库中,日期型、时间型和数字型字段不接受空字符,这种情况下, Null 就是唯一指定空值的方法,通过添加 null=True来允许一个字段可以为 Null
            class Post(models.Model):
                post_date = models.DateField(blank=True, null=True)
          • blank=Truenull=True 的区别:
            • Null 是针对数据库而言,如果 null=True 表示数据库该字段可以为空值
            • blank 是针对表单,如果 blank=True 表示该表单可以不填,直观的表示就是 admin 界面下 ,该字段名不是粗体
            • 额外补充: Null(空值) 和空的区别
              • Null 是表示数据未知,不一定为空,也不一定等于空字符
          • 自定义 Admin 后台中的字段标签
            • 在编辑页面中,每个字段的标签都是从模块的字段名称生成的,生成规则就是用空格替换下划线,首字母大写
            • 如果想要自定义标签的话,只需定义字段时,添加 verbose_name 这个属性
              class Post(models.Model):
                  email = models.EmailField(blank=True, verbose_name='e=mail')
            • 为了使语法简洁,可以省略 verbose_name ,但是这个参数必须放在第一位,这个简洁方法不适用 MangToManyFieldForeignKey 字段,因为它们第一个参数必须是模块类(也就是其他数据模型类的名字),这两种情况只能显式使用 verbose_name
        • ModelAdmin
          • 上面修改的都是数据模型级别的,而不是直接修改管理页面,也就是修改数据模型来达到管理页面的更改,而无法修改管理页面
          • Django 中提供了修改管理页面的方法,利用 ModelAdmin 类,在 admin.py 中,创建一个 admin.ModelAdmin 子类
            from django.contrib import admin
            from .models import Post
            
            class PostAdmin(admin.ModelAdmin):
                list_display = ('title', 'author', 'publish')
          	  
            admin.site.register(Post, PostAdmin)
          • 最后注册的时候,要带上这个扩展的子类(即第二个参数 PostAdmin
          • list_display 是一个字段名组成的元组,用于上边按列显示,这些字段必须是数据模型中有的
          • 除了 list_display ,还有以下几个属性
            • search_fields : 上边的快速查询栏
            • list_filter : 右边的按条件过滤选择
            • 一般开发人员会用日期来过滤,默认会包含:今天、过往七天、当月和今年,这些都是显示在右边的,还有一种按日期过滤选择的方式是使用 date_hierarchy
            • date_hierarchy = 'publish' 它接受的是字符串,直接赋值日期字段,而不是上面的元组形式,它会显示在列表顶层(查询栏下面),逐层深入的导航条,从可用的年份开始,逐层细分至月至日
            • ordering : 改变默认的排序方式,类似之前的 Meta 排序,多个优先第一个参数,然后优先后面
            • fields : 一般情况如果没有 fields 属性,表单中的字段顺序是和数据模型中定义的顺序一样,使用 fields 属性可以自定义顺序, fields 可以少写不想被他人编辑的字段,没有填写的字段就会被隐藏,防止被编辑修改
            • filter_horizontal : 针对多对多字段的属性,除了控件都是水平排列被选择,拥有十个以上选项的时候,使用它会比选框好很多
            • filter_vertical : 同上 filter_horizontal ,也只能用于多对多字段,除了控件都是垂直排列
            • raw_id_fields : 这个属性就是针对外键 ForeignKey ,原本是用下拉框来显示外键,但是一旦选项多就会导致变慢,采用这个属性,会将包含的选项展现成文本框,文本框内输入的是字段内容在数据库的 ID 号,也可以通过右边的放大镜选择添加
@PyxYuYu PyxYuYu added the Django label Dec 9, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant