writing_first_django_app_part2
下面开始创建管理者帐号:
$ python manage.py createsuperuser
输入用户名和密码,邮箱之后创建帐号
运行runserver之后,进入http://127.0.0.1:8000/admin/ 可以登录管理界面
登录之后这时在管理界面还没能看到我们的poll应用,我们需要告诉admin我们的Question对象需要在管理界面显示,修改polls/admin.py:
from django.contrib import admin from polls.models import Question admin.site.register(Question)
重启服务器之后就可以看到Questions了
刚才的register()函数仅仅是将Question类注册,现在增加一个QuestionAdmin类在里面来自定义admin form,修改polls/admin.py:
from django.contrib import admin from polls.models import Question class QuestionAdmin(admin.ModelAdmin): fields = [‘pub_date‘, ‘question_text‘] admin.site.register(Question, QuestionAdmin)
在register()函数中再增加一个参数QuestionAdmin类,由admin.ModelAdmin类继承而来,上面的修改之后将会按照fields的list里面的顺序来排列类
修改polls/admin.py,将表格分解成fieldsets:
from django.contrib import admin from polls.models import Question class QuestionAdmin(admin.ModelAdmin): fieldsets = [ (None, {‘fields‘: [‘question_text‘]}), (‘Date information‘, {‘fields‘: [‘pub_date‘]}), ] admin.site.register(Question, QuestionAdmin)
list中每一个tuple的第一个元素是这个fieldset的标题
collapse 有时候一些fieldset有很多不是常用的内容,可以将它初始化为收缩的:
from django.contrib import admin from polls.models import Question class QuestionAdmin(admin.ModelAdmin): fieldsets = [ (None, {‘fields‘: [‘question_text‘]}), (‘Date information‘, {‘fields‘: [‘pub_date‘], ‘classes‘: [‘collapse‘]}), ]
只需要在那个fieldset的tuple中增加一项‘classes‘: [‘collapse‘] 即可,这样需要查看这些内容时点击展开就可以查看
现在我们有了Question的管理页面,但是目前还没有展示每个Question的Choices
第一种方法同样可以像Question那样注册Choice,但是本来每个Choice是和一个Question关联的,这样管理不方便,所以可以用inline的方式来添加Choice:
# polls/admin.py from django.contrib import admin from polls.models import Choice, Question class ChoiceInline(admin.StackedInline): model = Choice extra = 3 class QuestionAdmin(admin.ModelAdmin): fieldsets = [ (None, {‘fields‘: [‘question_text‘]}), (‘Date information‘, {‘fields‘: [‘pub_date‘], ‘classes‘: [‘collapse‘]}), ] inlines = [ChoiceInline] admin.site.register(Question, QuestionAdmin)
ChoiceInline类将告诉django在Question的管理页面也可以编辑Choice,默认提供3个位置,我们可以手动增加数量或者减少
首先在工程的根目录创建templates目录,然后在mysite/settings.py里面添加模板的目录:
TEMPLATE_DIR = [os.path.join(BASE_DIR, ‘templates‘)]
然后在templates目录下创建目录admin,然后将系统django目录(django/contrib/admin/templates/admin/base_site.html)文件拷贝到新建的admin目录里面,如果找不到系统django的目录,可以运行下面命令:
$ python -c " import sys sys.path = sys.path[1:] import django print(django.__path__)"
然后修改模板,这里我们将管理页面上面的标题改为"Polls Administration",修改模板的代码,替换掉原来的{{site_header|default:_(‘Django administration‘)}}
{% block branding %} <h1 id="site-name"><a href="{% url ‘admin:index‘ %}">Polls Administration</a></h1> {% endblock %}
这里django的默认管理模板都是可以重载的,方法和刚才base_site.html一样,将原文件复制到新建的模板文件夹中,然后进行修改
原文:http://www.cnblogs.com/jolin123/p/4339973.html