Chinaunix首页 | 论坛 | 博客
  • 博客访问: 200495
  • 博文数量: 62
  • 博客积分: 725
  • 博客等级: 上士
  • 技术积分: 746
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-09 17:07
个人简介

exyz

文章分类

全部博文(62)

分类: Web开发

2015-02-01 11:19:04

命令行颜色
修改的配置的颜色

点击(此处)折叠或打开

  1. 让应用程序出现在django管理页面中

  2. 1.启用 admin web管理页面
  3.     1.1 创建管理用户,并设置管理账户、密码和邮箱
  4.         python manage.py createsuperuser
  5.     1.2 开启web服务
  6.         python manage.py runserver 0.0.0.0:8000
  7.     至此,就可以使用浏览器访问 http://IP:8000/admin 。
  8.     

  9. 2.把应用polls加入到admin web管理页面
  10.     配置应用的 admin.py ,注册Question数据库模型
  11.     polls/admin.py
  12.         from django.contrib import admin
  13.         from polls.models import Question

  14.         admin.site.register(Question)
  15.     
  16. 3.风格

  17.    3.1 自定义管理格式,使得 “Publication date”排序在 “Question text” 前面:
  18.     polls/admin.py
  19.         from django.contrib import admin
  20.         from polls.models import Question

  21.         class QuestionAdmin(admin.ModelAdmin):
  22.             fields = ['pub_date', 'question_text']

  23.         admin.site.register(Question, QuestionAdmin)
  24.         
  25.     3.2 改成多个域样式,使得 “Publication date” 和“Question text” 出现在2个表格中:
  26.     polls/admin.py
  27.         from django.contrib import admin
  28.         from polls.models import Question

  29.         class QuestionAdmin(admin.ModelAdmin):
  30.             fieldsets = [
  31.                 (None, {'fields': ['question_text']}),
  32.                 ('Date information', {'fields': ['pub_date']}),
  33.             ]

  34.         admin.site.register(Question, QuestionAdmin)
  35.         
  36.     3.3 想隐去部分内容,要隐去的部分添加 collapse 属性:
  37.     polls/admin.py
  38.         from django.contrib import admin
  39.         from polls.models import Question


  40.         class QuestionAdmin(admin.ModelAdmin):
  41.             fieldsets = [
  42.                 (None, {'fields': ['question_text']}),
  43.                 ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
  44.             ]

  45.         admin.site.register(Question, QuestionAdmin)    
  46.     3.4 增加相关的对象
  47.          一个 Question 应该有多个Choice,但是管理页面中并没有显示出多个选项。
  48.         2步解决,第一首先要把Choice像Question一样加入到管理站点中去:
  49.         polls/admin.py
  50.             from django.contrib import admin
  51.             from polls.models import Choice, Question
  52.             # ...
  53.             admin.site.register(Choice)            
  54.                     
  55.         完成第一步,会发现Choice出现在管理站点中了,它的 Question 域是一个选择下拉框,
  56.             django对ForeignKey在管理站点中表现出来是以选择框的形式。这里,只有一个问题可以选择。
  57.         第二步可以通过Question域旁边的+按钮添加新的投票项,但并不高效;
  58.         更好的方式是,移除Choice在管理站点的注册,然后重新编辑模型中Question的注册代码,把Choice加进去:
  59.         polls/admin.py
  60.             from django.contrib import admin
  61.             from polls.models import Choice, Question


  62.             class ChoiceInline(admin.StackedInline):
  63.                 model = Choice
  64.                 extra = 3


  65.             class QuestionAdmin(admin.ModelAdmin):
  66.                 fieldsets = [
  67.                     (None, {'fields': ['question_text']}),
  68.                     ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
  69.                 ]
  70.                 inlines = [ChoiceInline]

  71.             admin.site.register(Question, QuestionAdmin)        
  72.             
  73.         这样,Choice内容不再和Question同级出现,而是出现在Question内部,并且每次默认打开Question编辑页面都会出现3个新增内容版块。
  74.         如果新增Questiion的话,默认也会出现3个新的Choice选项添加。
  75.             
  76.     3.5 改变显示样式
  77.     
  78.         另,Choice 域在页面中占据空间太大,django有制表的方式来显示内部相似的对象,编辑管理配置中ChoiceInline 那行,
  79.         polls/admin.py
  80.             class ChoiceInline(admin.TabularInline):
  81.                 #...        
  82.         使用TabularInline 而不是StackedInline可以让有关的对象更紧凑、基于表格式展现出来。    
  83.         
  84.     3.6 自定义管理改变列表
  85.         django默认显示每个对象的str()值,如果加上每个域,使用list_display管理选项,每个域都会在页面中并列出来。
  86.         polls/admin.py
  87.             #...
  88.             list_display = ('question_text','pub_date','was_published_recently')
  89.             
  90.         添加之后,Question 也会显示出 发布时间以及是否最近发布的信息。
  91.         
  92. 4.排序
  93.     
  94.         可以点击每列顶部来排序查看,但 was_published_recently 顶部不支持,因为它的属性方法是不可排序的。
  95.         但也可以为它们定义显示样式,详细 https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display :
  96.         class Question(models.Model):
  97.             # ...
  98.             def was_published_recently(self):
  99.                 return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
  100.             was_published_recently.admin_order_field = 'pub_date'
  101.             was_published_recently.boolean = True
  102.             was_published_recently.short_description = 'Published recently?'
  103.                     
  104.         刷新页面,发现是否最近发布那列出现了绿勾和红叉的标识。        
  105.         
  106.         用 list_filter 增加改进Question过滤功能,pub_date 是DateTimeField类型值,django提供 “Any date,” “Today,” “Past 7 days,” “This month,” “This year”选项。
  107.         polls/admin.py
  108.             #...
  109.             list_filter = ['pub_date']    
  110. 5.搜索            
  111.         为 question_text 添加搜索功能,使用的是 like 进行匹配:
  112.         polls/admin.py    
  113.             #...
  114.             search_fields = ['question_text']
  115.         
  116. 6.更多参考
  117.         改变分页显示:https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_per_page
  118.         搜索框:https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields
  119.         过滤:https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter
  120.         时间划分:https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.date_hierarchy
  121.         列的头部排序:https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.ModelAdmin.date_hierarchy

阅读(1677) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~